diff options
author | Timothee Cour <timothee.cour2@gmail.com> | 2021-03-18 05:26:45 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-18 13:26:45 +0100 |
commit | 9d4d27a3ce6f7291be57554e059a03a746be7296 (patch) | |
tree | 2f1dc08a735f6543a03d322d79254a8f68f9a1d2 | |
parent | 2356d0603f70cad90f76fa57999054bf5c0a9157 (diff) | |
download | Nim-9d4d27a3ce6f7291be57554e059a03a746be7296.tar.gz |
adjust spellSuggestSecretSauce logic to avoid too many matches for small symbols (#17410)
-rw-r--r-- | compiler/lookups.nim | 10 | ||||
-rw-r--r-- | tests/misc/tspellsuggest.nim | 2 | ||||
-rw-r--r-- | tests/misc/tspellsuggest2.nim | 2 |
3 files changed, 10 insertions, 4 deletions
diff --git a/compiler/lookups.nim b/compiler/lookups.nim index e928f707e..15a22c778 100644 --- a/compiler/lookups.nim +++ b/compiler/lookups.nim @@ -408,10 +408,16 @@ proc fixSpelling(c: PContext, n: PNode, ident: PIdent, result: var string) = if list.len == 0: break let e = list.pop() if c.config.spellSuggestMax == spellSuggestSecretSauce: - if e.dist > e0.dist: break + const + smallThres = 2 + maxCountForSmall = 4 + # avoids ton of operator matches when mis-matching short symbols such as `i` + # other heuristics could be devised, such as only suggesting operators if `name0` + # is an operator (likewise with non-operators). + if e.dist > e0.dist or (name0.len <= smallThres and count >= maxCountForSmall): break elif count >= c.config.spellSuggestMax: break if count == 0: - result.add "\ncandidate misspellings (edit distance, lexical scope distance): " + result.add "\ncandidates (edit distance, scope distance); see '--spellSuggest': " result.add e.msg count.inc diff --git a/tests/misc/tspellsuggest.nim b/tests/misc/tspellsuggest.nim index 938be3460..033ed0afc 100644 --- a/tests/misc/tspellsuggest.nim +++ b/tests/misc/tspellsuggest.nim @@ -4,7 +4,7 @@ discard """ action: "reject" nimout: ''' tspellsuggest.nim(45, 13) Error: undeclared identifier: 'fooBar' -candidate misspellings (edit distance, lexical scope distance): +candidates (edit distance, scope distance); see '--spellSuggest': (1, 0): 'fooBar8' [var declared in tspellsuggest.nim(43, 9)] (1, 1): 'fooBar7' [var declared in tspellsuggest.nim(41, 7)] (1, 3): 'fooBar1' [var declared in tspellsuggest.nim(33, 5)] diff --git a/tests/misc/tspellsuggest2.nim b/tests/misc/tspellsuggest2.nim index fc3d9668a..78504c513 100644 --- a/tests/misc/tspellsuggest2.nim +++ b/tests/misc/tspellsuggest2.nim @@ -4,7 +4,7 @@ discard """ action: "reject" nimout: ''' tspellsuggest2.nim(45, 13) Error: undeclared identifier: 'fooBar' -candidate misspellings (edit distance, lexical scope distance): +candidates (edit distance, scope distance); see '--spellSuggest': (1, 0): 'fooBar8' [var declared in tspellsuggest2.nim(43, 9)] (1, 1): 'fooBar7' [var declared in tspellsuggest2.nim(41, 7)] (1, 3): 'fooBar1' [var declared in tspellsuggest2.nim(33, 5)] |