From 5aaa794519a6ab67a5d8b421ba9fb7daf8a1a7ad Mon Sep 17 00:00:00 2001 From: joe-conigliaro Date: Fri, 13 Sep 2019 23:15:30 +1000 Subject: [PATCH] compiler: clean up the typo check --- compiler/fn.v | 10 +++------- compiler/table.v | 18 ++++++------------ vlib/strings/similarity.v | 8 ++++---- 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/compiler/fn.v b/compiler/fn.v index 3b1c2d3d8a..a036c310ab 100644 --- a/compiler/fn.v +++ b/compiler/fn.v @@ -1018,21 +1018,17 @@ fn (f &Fn) str_args(table &Table) string { } // find local function variable with closest name to `name` -fn (f &Fn) find_misspelled_local_var(name string, min_match f64) string { - mut closest := f64(0) +fn (f &Fn) find_misspelled_local_var(name string, min_match f32) string { + mut closest := f32(0) mut closest_var := '' for var in f.local_vars { n := '${f.mod}.$var.name' if var.name == '' || !name.starts_with(f.mod) || (n.len - name.len > 3 || name.len - n.len > 3) { continue } p := strings.dice_coefficient(name, n) - println(' ## $name - $n: $p') if p > closest { closest = p closest_var = n } } - if closest >= min_match { - return closest_var - } - return '' + return if closest >= min_match { closest_var } else { '' } } diff --git a/compiler/table.v b/compiler/table.v index 7cba06a51c..a45e67e41a 100644 --- a/compiler/table.v +++ b/compiler/table.v @@ -955,8 +955,8 @@ fn (table &Table) identify_typo(name string, current_fn &Fn, fit &FileImportTabl } // find function with closest name to `name` -fn (table &Table) find_misspelled_fn(name string, min_match f64) string { - mut closest := f64(0) +fn (table &Table) find_misspelled_fn(name string, min_match f32) string { + mut closest := f32(0) mut closest_fn := '' for _, f in table.fns { n := '${f.mod}.$f.name' @@ -967,15 +967,12 @@ fn (table &Table) find_misspelled_fn(name string, min_match f64) string { closest_fn = n } } - if closest >= min_match { - return closest_fn - } - return '' + return if closest >= min_match { closest_fn } else { '' } } // find imported module with closest name to `name` -fn (table &Table) find_misspelled_imported_mod(name string, fit &FileImportTable, min_match f64) string { - mut closest := f64(0) +fn (table &Table) find_misspelled_imported_mod(name string, fit &FileImportTable, min_match f32) string { + mut closest := f32(0) mut closest_mod := '' for alias, mod in fit.imports { n := '${fit.module_name}.$alias' @@ -986,8 +983,5 @@ fn (table &Table) find_misspelled_imported_mod(name string, fit &FileImportTable closest_mod = '$alias ($mod)' } } - if closest >= min_match { - return closest_mod - } - return '' + return if closest >= min_match { closest_mod } else { '' } } diff --git a/vlib/strings/similarity.v b/vlib/strings/similarity.v index 4b18c86bf0..5fb0d1ac00 100644 --- a/vlib/strings/similarity.v +++ b/vlib/strings/similarity.v @@ -25,16 +25,16 @@ pub fn levenshtein_distance(a, b string) int { // use levenshtein distance algorithm to calculate // how similar two strings are as a percentage (higher is closer) -pub fn levenshtein_distance_percentage(a, b string) f64 { +pub fn levenshtein_distance_percentage(a, b string) f32 { d := levenshtein_distance(a, b) l := if a.len >= b.len { a.len } else { b.len } - return (1.00 - f64(d)/f64(l)) * 100.00 + return (1.00 - f32(d)/f32(l)) * 100.00 } // implementation of Sørensen–Dice coefficient. // find the similarity between two strings. // returns f64 between 0.0 (not similar) and 1.0 (exact match). -pub fn dice_coefficient(s1, s2 string) f64 { +pub fn dice_coefficient(s1, s2 string) f32 { if s1.len == 0 || s2.len == 0 { return 0.0 } if s1 == s2 { return 1.0 } if s1.len < 2 || s2.len < 2 { return 0.0 } @@ -55,5 +55,5 @@ pub fn dice_coefficient(s1, s2 string) f64 { intersection_size++ } } - return (2.0 * intersection_size) / (f64(s1.len) + f64(s2.len) - 2) + return (2.0 * intersection_size) / (f32(s1.len) + f32(s2.len) - 2) }