diff options
author | Ganesh Viswanathan <dev@genotrance.com> | 2020-02-22 15:09:37 -0600 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2020-02-27 13:22:18 +0100 |
commit | 96bffadf6045835ddefbf2903e135d50a93f7016 (patch) | |
tree | a06edee100aeeae1c1b9389cb1fc0ba8b99e3ca9 /compiler | |
parent | 73f5f1e80c9baf29c4d49dda7fa41351bb2b2400 (diff) | |
download | Nim-96bffadf6045835ddefbf2903e135d50a93f7016.tar.gz |
Fix #9405 - cfg and nims run in sync
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/cmdlinehelper.nim | 29 | ||||
-rw-r--r-- | compiler/nimconf.nim | 30 |
2 files changed, 31 insertions, 28 deletions
diff --git a/compiler/cmdlinehelper.nim b/compiler/cmdlinehelper.nim index b3c0c46c2..a03899071 100644 --- a/compiler/cmdlinehelper.nim +++ b/compiler/cmdlinehelper.nim @@ -10,7 +10,7 @@ ## Helpers for binaries that use compiler passes, eg: nim, nimsuggest, nimfix import - options, idents, nimconf, scriptconfig, extccomp, commands, msgs, + options, idents, nimconf, extccomp, commands, msgs, lineinfos, modulegraphs, condsyms, os, pathutils from strutils import normalize @@ -43,32 +43,13 @@ proc processCmdLineAndProjectPath*(self: NimProg, conf: ConfigRef) = conf.projectPath = AbsoluteDir canonicalizePath(conf, AbsoluteFile getCurrentDir()) proc loadConfigsAndRunMainCommand*(self: NimProg, cache: IdentCache; conf: ConfigRef): bool = - loadConfigs(DefaultConfig, cache, conf) # load all config files if self.suggestMode: conf.command = "nimsuggest" + loadConfigs(DefaultConfig, cache, conf) # load all config files - template runNimScriptIfExists(path: AbsoluteFile) = - let p = path # eval once - if fileExists(p): - runNimScript(cache, p, freshDefines = false, conf) - - # Caution: make sure this stays in sync with `loadConfigs` - if optSkipSystemConfigFile notin conf.globalOptions: - runNimScriptIfExists(getSystemConfigPath(conf, DefaultConfigNims)) - - if optSkipUserConfigFile notin conf.globalOptions: - runNimScriptIfExists(getUserConfigPath(DefaultConfigNims)) - - if optSkipParentConfigFiles notin conf.globalOptions: - for dir in parentDirs(conf.projectPath.string, fromRoot = true, inclusive = false): - runNimScriptIfExists(AbsoluteDir(dir) / DefaultConfigNims) - - if optSkipProjConfigFile notin conf.globalOptions: - runNimScriptIfExists(conf.projectPath / DefaultConfigNims) block: let scriptFile = conf.projectFull.changeFileExt("nims") if not self.suggestMode: - runNimScriptIfExists(scriptFile) # 'nim foo.nims' means to just run the NimScript file and do nothing more: if fileExists(scriptFile) and scriptFile == conf.projectFull: if conf.command == "": @@ -76,12 +57,6 @@ proc loadConfigsAndRunMainCommand*(self: NimProg, cache: IdentCache; conf: Confi return false elif conf.command.normalize == "e": return false - else: - if scriptFile != conf.projectFull: - runNimScriptIfExists(scriptFile) - else: - # 'nimsuggest foo.nims' means to just auto-complete the NimScript file - discard # now process command line arguments again, because some options in the # command line can overwrite the config file's settings diff --git a/compiler/nimconf.nim b/compiler/nimconf.nim index 93cc21573..df1ceb610 100644 --- a/compiler/nimconf.nim +++ b/compiler/nimconf.nim @@ -11,7 +11,7 @@ import llstream, commands, os, strutils, msgs, lexer, - options, idents, wordrecg, strtabs, lineinfos, pathutils + options, idents, wordrecg, strtabs, lineinfos, pathutils, scriptconfig # ---------------- configuration file parser ----------------------------- # we use Nim's scanner here to save space and work @@ -248,17 +248,31 @@ proc loadConfigs*(cfg: RelativeFile; cache: IdentCache; conf: ConfigRef) = if readConfigFile(configPath, cache, conf): configFiles.add(configPath) + template runNimScriptIfExists(path: AbsoluteFile) = + let p = path # eval once + if fileExists(p): + runNimScript(cache, p, freshDefines = false, conf) + if optSkipSystemConfigFile notin conf.globalOptions: readConfigFile(getSystemConfigPath(conf, cfg)) + if cfg == DefaultConfig: + runNimScriptIfExists(getSystemConfigPath(conf, DefaultConfigNims)) + if optSkipUserConfigFile notin conf.globalOptions: readConfigFile(getUserConfigPath(cfg)) + if cfg == DefaultConfig: + runNimScriptIfExists(getUserConfigPath(DefaultConfigNims)) + let pd = if not conf.projectPath.isEmpty: conf.projectPath else: AbsoluteDir(getCurrentDir()) if optSkipParentConfigFiles notin conf.globalOptions: for dir in parentDirs(pd.string, fromRoot=true, inclusive=false): readConfigFile(AbsoluteDir(dir) / cfg) + if cfg == DefaultConfig: + runNimScriptIfExists(AbsoluteDir(dir) / DefaultConfigNims) + if optSkipProjConfigFile notin conf.globalOptions: readConfigFile(pd / cfg) @@ -269,6 +283,20 @@ proc loadConfigs*(cfg: RelativeFile; cache: IdentCache; conf: ConfigRef) = projectConfig = changeFileExt(conf.projectFull, "nim.cfg") readConfigFile(projectConfig) + if cfg == DefaultConfig: + runNimScriptIfExists(pd / DefaultConfigNims) + for filename in configFiles: # delayed to here so that `hintConf` is honored rawMessage(conf, hintConf, filename.string) + + block: + let scriptFile = conf.projectFull.changeFileExt("nims") + if conf.command != "nimsuggest": + runNimScriptIfExists(scriptFile) + else: + if scriptFile != conf.projectFull: + runNimScriptIfExists(scriptFile) + else: + # 'nimsuggest foo.nims' means to just auto-complete the NimScript file + discard |