nimsuggest: when invoked with a directory, detect the main nim file on its own

This commit is contained in:
Andreas Rumpf 2017-03-14 12:28:15 +01:00
commit f7d760cb94
2 changed files with 24 additions and 1 deletions

View file

@ -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, {'(', ')', '.'})

View file

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