support `.Type` syntax for module type lookup
This commit is contained in:
parent
dcffd378e1
commit
584b245c8b
|
@ -27,6 +27,15 @@ package istring[24] builtinTypeNames;
|
|||
* or the child type for single index access.
|
||||
*/
|
||||
@("*arr*") istring ARRAY_SYMBOL_NAME;
|
||||
/**
|
||||
* In breadcrumbs this is a single entry meaning that the type following this
|
||||
* started with a dot `.`, so module scope instead of local scope is to be used
|
||||
* for type resolution.
|
||||
*
|
||||
* Note that auto-completion does not rely on this symbol, only type / symbol
|
||||
* lookup relies on this.
|
||||
*/
|
||||
@("*arr*") istring MODULE_SYMBOL_NAME;
|
||||
/**
|
||||
* Type suffix, in breadcrumbs this is a single entry.
|
||||
*
|
||||
|
|
|
@ -1358,6 +1358,10 @@ void writeIotcTo(T)(const TypeIdentifierPart tip, ref T output) nothrow
|
|||
{
|
||||
if (!tip.identifierOrTemplateInstance)
|
||||
return;
|
||||
|
||||
if (tip.dot)
|
||||
output.insert(MODULE_SYMBOL_NAME);
|
||||
|
||||
if (tip.identifierOrTemplateInstance.identifier != tok!"")
|
||||
output.insert(internString(tip.identifierOrTemplateInstance.identifier.text));
|
||||
else
|
||||
|
|
|
@ -263,7 +263,14 @@ do
|
|||
getSymbolFromImports(imports, part);
|
||||
else
|
||||
{
|
||||
auto symbols = moduleScope.getSymbolsByNameAndCursor(part, symbol.location);
|
||||
auto symbols = part == MODULE_SYMBOL_NAME
|
||||
? {
|
||||
assert(!breadcrumbs.empty);
|
||||
part = breadcrumbs.front;
|
||||
breadcrumbs.popFront();
|
||||
return moduleScope.getSymbolsByName(part);
|
||||
}()
|
||||
: moduleScope.getSymbolsByNameAndCursor(part, symbol.location);
|
||||
if (symbols.length > 0)
|
||||
currentSymbol = symbols[0];
|
||||
else
|
||||
|
|
|
@ -24,3 +24,11 @@ unittest
|
|||
auto from_cast = cast(A.B.C) nonExist;
|
||||
from_cast.
|
||||
}
|
||||
|
||||
unittest
|
||||
{
|
||||
struct A {}
|
||||
|
||||
auto from_cast = cast(.A.B.C) nonExist;
|
||||
from_cast.
|
||||
}
|
||||
|
|
|
@ -6,3 +6,6 @@ diff actual1.txt expected1.txt --strip-trailing-cr
|
|||
|
||||
../../bin/dcd-client $1 file.d -c239 > actual2.txt
|
||||
diff actual2.txt expected2.txt --strip-trailing-cr
|
||||
|
||||
../../bin/dcd-client $1 file.d -c320 > actual3.txt
|
||||
diff actual3.txt expected1.txt --strip-trailing-cr
|
||||
|
|
Loading…
Reference in New Issue