mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
implements module grouping for the import statement
This commit is contained in:
@@ -186,16 +186,28 @@ proc myImportModule(c: PContext, n: PNode): PSym =
|
||||
message(n.info, warnDeprecated, result.name.s)
|
||||
#suggestSym(n.info, result, false)
|
||||
|
||||
proc impMod(c: PContext; it: PNode) =
|
||||
let m = myImportModule(c, it)
|
||||
if m != nil:
|
||||
var emptySet: IntSet
|
||||
# ``addDecl`` needs to be done before ``importAllSymbols``!
|
||||
addDecl(c, m, it.info) # add symbol to symbol table of module
|
||||
importAllSymbolsExcept(c, m, emptySet)
|
||||
#importForwarded(c, m.ast, emptySet)
|
||||
|
||||
proc evalImport(c: PContext, n: PNode): PNode =
|
||||
result = n
|
||||
var emptySet: IntSet
|
||||
for i in countup(0, sonsLen(n) - 1):
|
||||
var m = myImportModule(c, n.sons[i])
|
||||
if m != nil:
|
||||
# ``addDecl`` needs to be done before ``importAllSymbols``!
|
||||
addDecl(c, m, n.info) # add symbol to symbol table of module
|
||||
importAllSymbolsExcept(c, m, emptySet)
|
||||
#importForwarded(c, m.ast, emptySet)
|
||||
let it = n.sons[i]
|
||||
if it.kind == nkInfix and it.len == 3 and it[2].kind == nkBracket:
|
||||
let sep = renderTree(it.sons[0], {renderNoComments})
|
||||
let dir = renderTree(it.sons[1], {renderNoComments})
|
||||
for x in it[2]:
|
||||
let f = renderTree(x, {renderNoComments})
|
||||
let a = newStrNode(nkStrLit, (dir & sep & f).replace(" "))
|
||||
impMod(c, a)
|
||||
else:
|
||||
impMod(c, it)
|
||||
|
||||
proc evalFrom(c: PContext, n: PNode): PNode =
|
||||
result = n
|
||||
|
||||
@@ -216,8 +216,8 @@ when defined(nimfix):
|
||||
# when we cannot find the identifier, retry with a changed identifer:
|
||||
proc altSpelling(x: PIdent): PIdent =
|
||||
case x.s[0]
|
||||
of 'A'..'Z': result = getIdent(toLower(x.s[0]) & x.s.substr(1))
|
||||
of 'a'..'z': result = getIdent(toLower(x.s[0]) & x.s.substr(1))
|
||||
of 'A'..'Z': result = getIdent(toLowerAscii(x.s[0]) & x.s.substr(1))
|
||||
of 'a'..'z': result = getIdent(toLowerAscii(x.s[0]) & x.s.substr(1))
|
||||
else: result = x
|
||||
|
||||
template fixSpelling(n: PNode; ident: PIdent; op: untyped) =
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
## Nimfix is a tool that helps to convert old-style Nimrod code to Nim code.
|
||||
|
||||
import strutils, os, parseopt
|
||||
import compiler/options, compiler/commands, compiler/modules, compiler/sem,
|
||||
compiler/passes, compiler/passaux, compiler/nimfix/pretty,
|
||||
compiler/msgs, compiler/nimconf,
|
||||
compiler/extccomp, compiler/condsyms, compiler/lists,
|
||||
compiler/modulegraphs, compiler/idents
|
||||
import compiler/[options, commands, modules, sem,
|
||||
passes, passaux, nimfix/pretty,
|
||||
msgs, nimconf,
|
||||
extccomp, condsyms, lists,
|
||||
modulegraphs, idents]
|
||||
|
||||
const Usage = """
|
||||
Nimfix - Tool to patch Nim code
|
||||
|
||||
@@ -77,6 +77,17 @@ Language Additions
|
||||
v[0] = 6.0
|
||||
echo v[0]
|
||||
|
||||
- The ``import`` statement now supports importing multiple modules from
|
||||
the same directory:
|
||||
|
||||
.. code-block:: nim
|
||||
import compiler / [ast, parser, lexer]
|
||||
|
||||
Is a shortcut for:
|
||||
|
||||
.. code-block:: nim
|
||||
import compiler / ast, compiler / parser, compiler / lexer
|
||||
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
Reference in New Issue
Block a user