More complete selective import support
This commit is contained in:
parent
8f1effc5cc
commit
40582c232f
|
|
@ -293,22 +293,29 @@ AutocompleteResponse parenCompletion(T)(T beforeTokens,
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isSelectiveImport(T)(T tokens) pure nothrow
|
bool isSelectiveImport(T)(T tokens)
|
||||||
{
|
{
|
||||||
size_t i = 1;
|
size_t i = tokens.length - 1;
|
||||||
if (tokens[$ - i] != tok!":")
|
stderr.writeln(stringToken(tokens[i]));
|
||||||
|
if (!(tokens[i] == tok!":" || tokens[i] == tok!","))
|
||||||
return false;
|
return false;
|
||||||
i++;
|
i--;
|
||||||
loop: while (i < tokens.length) switch (tokens[$ - i].type)
|
loop: while (true) switch (tokens[i].type)
|
||||||
{
|
{
|
||||||
case tok!"identifier":
|
case tok!"identifier":
|
||||||
case tok!".":
|
case tok!".":
|
||||||
i++;
|
case tok!",":
|
||||||
|
case tok!":":
|
||||||
|
if (i == 0)
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
i--;
|
||||||
break;
|
break;
|
||||||
|
case tok!"import":
|
||||||
|
return true;
|
||||||
default:
|
default:
|
||||||
break loop;
|
return false;
|
||||||
}
|
}
|
||||||
return tokens[$ - i] == tok!"import";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unittest
|
unittest
|
||||||
|
|
@ -319,6 +326,8 @@ unittest
|
||||||
t ~= Token(tok!".");
|
t ~= Token(tok!".");
|
||||||
t ~= Token(tok!"identifier");
|
t ~= Token(tok!"identifier");
|
||||||
t ~= Token(tok!":");
|
t ~= Token(tok!":");
|
||||||
|
t ~= Token(tok!"identifier");
|
||||||
|
t ~= Token(tok!",");
|
||||||
assert (isSelectiveImport(t));
|
assert (isSelectiveImport(t));
|
||||||
Token[] t2;
|
Token[] t2;
|
||||||
t2 ~= Token(tok!"else");
|
t2 ~= Token(tok!"else");
|
||||||
|
|
@ -335,30 +344,48 @@ unittest
|
||||||
* ---
|
* ---
|
||||||
*/
|
*/
|
||||||
AutocompleteResponse selectiveImportCompletion(T)(T beforeTokens)
|
AutocompleteResponse selectiveImportCompletion(T)(T beforeTokens)
|
||||||
|
in
|
||||||
|
{
|
||||||
|
assert (beforeTokens.length >= 2);
|
||||||
|
}
|
||||||
|
body
|
||||||
{
|
{
|
||||||
Log.trace("selectiveImportCompletion");
|
Log.trace("selectiveImportCompletion");
|
||||||
AutocompleteResponse response;
|
AutocompleteResponse response;
|
||||||
size_t i = 2;
|
size_t i = beforeTokens.length - 2;
|
||||||
loop: while (i < beforeTokens.length) switch (beforeTokens[$ - i].type)
|
loop: while (i > 0) switch (beforeTokens[i].type)
|
||||||
{
|
{
|
||||||
case tok!"identifier":
|
case tok!"identifier":
|
||||||
|
case tok!",":
|
||||||
case tok!".":
|
case tok!".":
|
||||||
i++;
|
case tok!":":
|
||||||
|
i--;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break loop;
|
break loop;
|
||||||
}
|
}
|
||||||
|
Log.trace("i = ", i);
|
||||||
|
size_t j = i;
|
||||||
|
loop2: while (j <= beforeTokens.length) switch (beforeTokens[j].type)
|
||||||
|
{
|
||||||
|
case tok!":": break loop2;
|
||||||
|
default: j++; break;
|
||||||
|
}
|
||||||
|
Log.trace("j = ", j);
|
||||||
|
|
||||||
string path;
|
string path;
|
||||||
size_t j = 0;
|
{
|
||||||
foreach (token; beforeTokens[($ - i + 1) .. $ - 1])
|
size_t k = 0;
|
||||||
|
foreach (token; beforeTokens[i + 1 .. j])
|
||||||
{
|
{
|
||||||
if (token.type == tok!"identifier")
|
if (token.type == tok!"identifier")
|
||||||
{
|
{
|
||||||
if (j != 0)
|
if (k != 0)
|
||||||
path ~= "/";
|
path ~= "/";
|
||||||
path ~= token.text;
|
path ~= token.text;
|
||||||
}
|
}
|
||||||
j++;
|
k++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
auto symbols = ModuleCache.getSymbolsInModule(ModuleCache.resolveImportLoctation(path));
|
auto symbols = ModuleCache.getSymbolsInModule(ModuleCache.resolveImportLoctation(path));
|
||||||
import containers.hashset;
|
import containers.hashset;
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 9187ad6c775e91c78fd2e9313d2d66d1922445eb
|
Subproject commit 5a39c333a1264753b067d4ba34ebfa1e7a2f04fa
|
||||||
Loading…
Reference in New Issue