fix #2844 #3911; add --spellsuggest to suggest symbols in scope with similar spellings on undefined symbol error (#16067)
* add --spellsuggest to suggest symbols in scope with similar spellings on undefined symbol errors * implement --spellsuggest with 0 arguments
This commit is contained in:
parent
d5eb658034
commit
48eab5370a
9 changed files with 178 additions and 32 deletions
7
tests/misc/mspellsuggest.nim
Normal file
7
tests/misc/mspellsuggest.nim
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
proc fooBar4*(a: int) = discard
|
||||
var fooBar9* = 0
|
||||
|
||||
var fooCar* = 0
|
||||
type FooBar* = int
|
||||
type FooCar* = int
|
||||
type GooBa* = int
|
||||
45
tests/misc/tspellsuggest.nim
Normal file
45
tests/misc/tspellsuggest.nim
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
discard """
|
||||
# pending bug #16521 (bug 12) use `matrix`
|
||||
cmd: "nim c --spellsuggest:15 --hints:off $file"
|
||||
action: "reject"
|
||||
nimout: '''
|
||||
tspellsuggest.nim(45, 13) Error: undeclared identifier: 'fooBar'
|
||||
candidate misspellings (edit distance, lexical scope distance):
|
||||
(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)]
|
||||
(1, 3): 'fooBar2' [let declared in tspellsuggest.nim(34, 5)]
|
||||
(1, 3): 'fooBar3' [const declared in tspellsuggest.nim(35, 7)]
|
||||
(1, 3): 'fooBar4' [proc declared in tspellsuggest.nim(36, 6)]
|
||||
(1, 3): 'fooBar5' [template declared in tspellsuggest.nim(37, 10)]
|
||||
(1, 3): 'fooBar6' [macro declared in tspellsuggest.nim(38, 7)]
|
||||
(1, 5): 'FooBar' [type declared in mspellsuggest.nim(5, 6)]
|
||||
(1, 5): 'fooBar4' [proc declared in mspellsuggest.nim(1, 6)]
|
||||
(1, 5): 'fooBar9' [var declared in mspellsuggest.nim(2, 5)]
|
||||
(1, 5): 'fooCar' [var declared in mspellsuggest.nim(4, 5)]
|
||||
(2, 5): 'FooCar' [type declared in mspellsuggest.nim(6, 6)]
|
||||
(2, 5): 'GooBa' [type declared in mspellsuggest.nim(7, 6)]
|
||||
(3, 0): 'fooBarBaz' [const declared in tspellsuggest.nim(44, 11)]
|
||||
'''
|
||||
"""
|
||||
|
||||
# tests `--spellsuggest:num`
|
||||
|
||||
|
||||
|
||||
# line 30
|
||||
import ./mspellsuggest
|
||||
|
||||
var fooBar1 = 0
|
||||
let fooBar2 = 0
|
||||
const fooBar3 = 0
|
||||
proc fooBar4() = discard
|
||||
template fooBar5() = discard
|
||||
macro fooBar6() = discard
|
||||
|
||||
proc main =
|
||||
var fooBar7 = 0
|
||||
block:
|
||||
var fooBar8 = 0
|
||||
const fooBarBaz = 0
|
||||
let x = fooBar
|
||||
45
tests/misc/tspellsuggest2.nim
Normal file
45
tests/misc/tspellsuggest2.nim
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
discard """
|
||||
# pending bug #16521 (bug 12) use `matrix`
|
||||
cmd: "nim c --spellsuggest --hints:off $file"
|
||||
action: "reject"
|
||||
nimout: '''
|
||||
tspellsuggest2.nim(45, 13) Error: undeclared identifier: 'fooBar'
|
||||
candidate misspellings (edit distance, lexical scope distance):
|
||||
(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)]
|
||||
(1, 3): 'fooBar2' [let declared in tspellsuggest2.nim(34, 5)]
|
||||
(1, 3): 'fooBar3' [const declared in tspellsuggest2.nim(35, 7)]
|
||||
(1, 3): 'fooBar4' [proc declared in tspellsuggest2.nim(36, 6)]
|
||||
(1, 3): 'fooBar5' [template declared in tspellsuggest2.nim(37, 10)]
|
||||
(1, 3): 'fooBar6' [macro declared in tspellsuggest2.nim(38, 7)]
|
||||
(1, 5): 'FooBar' [type declared in mspellsuggest.nim(5, 6)]
|
||||
(1, 5): 'fooBar4' [proc declared in mspellsuggest.nim(1, 6)]
|
||||
(1, 5): 'fooBar9' [var declared in mspellsuggest.nim(2, 5)]
|
||||
(1, 5): 'fooCar' [var declared in mspellsuggest.nim(4, 5)]
|
||||
'''
|
||||
"""
|
||||
|
||||
# tests `--spellsuggest`
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# line 30
|
||||
import ./mspellsuggest
|
||||
|
||||
var fooBar1 = 0
|
||||
let fooBar2 = 0
|
||||
const fooBar3 = 0
|
||||
proc fooBar4() = discard
|
||||
template fooBar5() = discard
|
||||
macro fooBar6() = discard
|
||||
|
||||
proc main =
|
||||
var fooBar7 = 0
|
||||
block:
|
||||
var fooBar8 = 0
|
||||
const fooBarBaz = 0
|
||||
let x = fooBar
|
||||
Loading…
Add table
Add a link
Reference in a new issue