Siegfried Pammer 15 years ago
parent
commit
3b0fe52dd4
  1. 12
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs
  2. 26
      src/Libraries/NRefactory/Test/Lexer/VBNet/ImplicitLineContinuationTests.cs

12
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs

@ -444,9 +444,15 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -444,9 +444,15 @@ namespace ICSharpCode.NRefactory.Parser.VB
var queryOperators = new int[] { Tokens.From, Tokens.Aggregate, Tokens.Select, Tokens.Distinct,
Tokens.Where, Tokens.Order, Tokens.By, Tokens.Ascending, Tokens.Descending, Tokens.Take,
Tokens.Skip, Tokens.Let, Tokens.Group, Tokens.Into, Tokens.On, Tokens.While, Tokens.Join };
if ((queryOperators.Contains(prevTokenKind) || queryOperators.Contains(nextTokenKind))
&& ef.InContext(Context.Query))
return true;
if (ef.InContext(Context.Query)) {
// Distinct is special case
// fixes http://community.sharpdevelop.net/forums/p/12068/32893.aspx#32893
if (prevTokenKind == Tokens.Distinct && !queryOperators.Contains(nextTokenKind))
return false;
if ((queryOperators.Contains(prevTokenKind) || queryOperators.Contains(nextTokenKind)))
return true;
}
// 8th rule
// after binary operators (+, -, /, *, etc.) in an expression context

26
src/Libraries/NRefactory/Test/Lexer/VBNet/ImplicitLineContinuationTests.cs

@ -135,6 +135,32 @@ End Module"; @@ -135,6 +135,32 @@ End Module";
Tokens.End, Tokens.Module);
}
/// <remarks>tests http://community.sharpdevelop.net/forums/p/12068/32893.aspx#32893</remarks>
[Test]
public void Bug_Thread12068()
{
string code = @"Class MainClass
Public Shared Sub Main()
Dim categoryNames = From p In AList _
Select p.AFunction(1,2,3) _
Distinct
End Sub
End Class";
ILexer lexer = GenerateLexer(new StringReader(code));
CheckTokens(
lexer, Tokens.Class, Tokens.Identifier, Tokens.EOL,
Tokens.Public, Tokens.Shared, Tokens.Sub, Tokens.Identifier, Tokens.OpenParenthesis, Tokens.CloseParenthesis, Tokens.EOL,
Tokens.Dim, Tokens.Identifier, Tokens.Assign, Tokens.From, Tokens.Identifier, Tokens.In, Tokens.Identifier,
Tokens.Select, Tokens.Identifier, Tokens.Dot, Tokens.Identifier, Tokens.OpenParenthesis, Tokens.LiteralInteger,
Tokens.Comma, Tokens.LiteralInteger, Tokens.Comma, Tokens.LiteralInteger, Tokens.CloseParenthesis,
Tokens.Distinct, Tokens.EOL,
Tokens.End, Tokens.Sub, Tokens.EOL,
Tokens.End, Tokens.Class
);
}
#region Helpers
ILexer GenerateLexer(StringReader sr)
{

Loading…
Cancel
Save