#![feature(ascii_ctype)]
use std::ascii::AsciiExt;
use std::collections::HashMap;

pub fn word_count(text: &str) -> HashMap<String, u32> {
    let mut result: HashMap<String, u32> = HashMap::new();

    let iter = text.split(|x: char| x.is_ascii_punctuation() || x == ' ')
        .filter(|x| !x.is_empty())
        .map(|x| x.to_lowercase());

    for i in iter {
        let entry = result.entry(i).or_insert(0);
        *entry += 1;
    }

    result
}

#![feature(ascii_ctype)]
use std::ascii::AsciiExt;
use std::collections::HashMap;

pub fn word_count(text: &str) -> HashMap<String, u32> {
    let iter = text.split(|x: char| x.is_ascii_punctuation() || x == ' ')
        .filter(|x| !x.is_empty())
        .map(|x| x.to_lowercase());

    let mut result: HashMap<String, u32> = HashMap::new();

    for i in iter {
        let v = result.get(&i).map_or(1, |v| v + 1);

        result.insert(i, v);
    }

    result
}

--- 
+++ 
@@ -3,16 +3,15 @@
 use std::collections::HashMap;
 
 pub fn word_count(text: &str) -> HashMap<String, u32> {
+    let mut result: HashMap<String, u32> = HashMap::new();
+
     let iter = text.split(|x: char| x.is_ascii_punctuation() || x == ' ')
         .filter(|x| !x.is_empty())
         .map(|x| x.to_lowercase());
 
-    let mut result: HashMap<String, u32> = HashMap::new();
-
     for i in iter {
-        let v = result.get(&i).map_or(1, |v| v + 1);
-
-        result.insert(i, v);
+        let entry = result.entry(i).or_insert(0);
+        *entry += 1;
     }
 
     result
Use entry instead of get

It looks better
