nimsuggest: when invoked with a directory, detect the main nim file on its own
This commit is contained in:
parent
b414806e66
commit
f7d760cb94
2 changed files with 24 additions and 1 deletions
|
|
@ -392,6 +392,23 @@ proc findModule*(modulename, currentModule: string): string =
|
||||||
result = findFile(m)
|
result = findFile(m)
|
||||||
patchModule()
|
patchModule()
|
||||||
|
|
||||||
|
proc findProjectNimFile*(pkg: string): string =
|
||||||
|
const extensions = [".nims", ".cfg", ".nimcfg", ".nimble"]
|
||||||
|
var candidates: seq[string] = @[]
|
||||||
|
for k, f in os.walkDir(pkg, relative=true):
|
||||||
|
if k == pcFile and f != "config.nims":
|
||||||
|
let (_, name, ext) = splitFile(f)
|
||||||
|
if ext in extensions:
|
||||||
|
let x = changeFileExt(pkg / name, ".nim")
|
||||||
|
if fileExists(x):
|
||||||
|
candidates.add x
|
||||||
|
for c in candidates:
|
||||||
|
# nim-foo foo or foo nfoo
|
||||||
|
if (pkg in c) or (c in pkg): return c
|
||||||
|
if candidates.len >= 1:
|
||||||
|
return candidates[0]
|
||||||
|
return ""
|
||||||
|
|
||||||
proc canonDynlibName(s: string): string =
|
proc canonDynlibName(s: string): string =
|
||||||
let start = if s.startsWith("lib"): 3 else: 0
|
let start = if s.startsWith("lib"): 3 else: 0
|
||||||
let ende = strutils.find(s, {'(', ')', '.'})
|
let ende = strutils.find(s, {'(', ')', '.'})
|
||||||
|
|
|
||||||
|
|
@ -556,7 +556,13 @@ proc processCmdLine*(pass: TCmdLinePass, cmd: string) =
|
||||||
suggestMaxResults = parseInt(p.val)
|
suggestMaxResults = parseInt(p.val)
|
||||||
else: processSwitch(pass, p)
|
else: processSwitch(pass, p)
|
||||||
of cmdArgument:
|
of cmdArgument:
|
||||||
options.gProjectName = unixToNativePath(p.key)
|
let a = unixToNativePath(p.key)
|
||||||
|
if dirExists(a) and not fileExists(a.addFileExt("nim")):
|
||||||
|
options.gProjectName = findProjectNimFile(a)
|
||||||
|
# don't make it worse, report the error the old way:
|
||||||
|
if options.gProjectName.len == 0: options.gProjectName = a
|
||||||
|
else:
|
||||||
|
options.gProjectName = a
|
||||||
# if processArgument(pass, p, argsCount): break
|
# if processArgument(pass, p, argsCount): break
|
||||||
|
|
||||||
proc handleCmdLine(cache: IdentCache; config: ConfigRef) =
|
proc handleCmdLine(cache: IdentCache; config: ConfigRef) =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue