Merge pull request #373 from BBasile/fixup-uda-dotcompletion
fixup #369, dot completion broken in bodies + handle templatized UDAs
This commit is contained in:
commit
a734182aab
|
@ -1205,24 +1205,51 @@ bool isUdaExpression(T)(ref T tokens)
|
||||||
ptrdiff_t skip;
|
ptrdiff_t skip;
|
||||||
ptrdiff_t i = tokens.length - 2;
|
ptrdiff_t i = tokens.length - 2;
|
||||||
|
|
||||||
while (i >= 2)
|
if (i < 1)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
// skips the UDA ctor
|
||||||
|
if (tokens[i].type == tok!")")
|
||||||
{
|
{
|
||||||
if (skip == 0 && tokens[i].type == tok!"identifier" && tokens[i-1].type == tok!"@")
|
++skip;
|
||||||
|
--i;
|
||||||
|
while (i >= 2)
|
||||||
{
|
{
|
||||||
result = true;
|
skip += tokens[i].type == tok!")";
|
||||||
break;
|
skip -= tokens[i].type == tok!"(";
|
||||||
|
--i;
|
||||||
|
if (skip == 0)
|
||||||
|
{
|
||||||
|
// @UDA!(TemplateParameters)(FunctionParameters)
|
||||||
|
if (i > 3 && tokens[i].type == tok!"!" && tokens[i-1].type == tok!")")
|
||||||
|
{
|
||||||
|
skip = 1;
|
||||||
|
i -= 2;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skip == 0)
|
||||||
|
{
|
||||||
|
// @UDA!SingleTemplateParameter
|
||||||
|
if (i > 2 && tokens[i].type == tok!"identifier" && tokens[i-1].type == tok!"!")
|
||||||
|
{
|
||||||
|
i -= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
skip += tokens[i].type == tok!")";
|
// @UDA
|
||||||
skip -= tokens[i].type == tok!"(";
|
if (i > 0 && tokens[i].type == tok!"identifier" && tokens[i-1].type == tok!"@")
|
||||||
|
{
|
||||||
--i;
|
result = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
identifiers
|
||||||
|
alignof k
|
||||||
|
bar f
|
||||||
|
c v
|
||||||
|
init k
|
||||||
|
mangleof k
|
||||||
|
sizeof k
|
||||||
|
stringof k
|
||||||
|
tupleof k
|
|
@ -0,0 +1 @@
|
||||||
|
struct UDA(T){int a,b;} struct Foo{int c; @UDA!(int)(0,1) void bar(){this.}}
|
|
@ -6,3 +6,6 @@ diff actual.txt expected.txt
|
||||||
|
|
||||||
../../bin/dcd-client $1 file1.d -c25 > actual1.txt
|
../../bin/dcd-client $1 file1.d -c25 > actual1.txt
|
||||||
diff actual1.txt expected1.txt
|
diff actual1.txt expected1.txt
|
||||||
|
|
||||||
|
../../bin/dcd-client $1 file2.d -c74 > actual2.txt
|
||||||
|
diff actual2.txt expected2.txt
|
||||||
|
|
Loading…
Reference in New Issue