adjust spellSuggestSecretSauce logic to avoid too many matches for small symbols (#17410)

This commit is contained in:
Timothee Cour
2021-03-18 05:26:45 -07:00
committed by GitHub
parent 2356d0603f
commit 9d4d27a3ce
3 changed files with 10 additions and 4 deletions

View File

@@ -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

View File

@@ -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)]

View File

@@ -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)]