Browse Source

C# expression finder: Fix "if (a > b) {}".

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2617 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
76636e154f
  1. 16
      src/Main/Base/Test/CSharpExpressionFinderTests.cs
  2. 5
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs
  3. 4
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs
  4. 2
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs

16
src/Main/Base/Test/CSharpExpressionFinderTests.cs

@ -78,13 +78,13 @@ class Main {
[Test] [Test]
public void Simple() public void Simple()
{ {
FindFull(document, "mple += 1", "simple", ExpressionContext.StatementStart); FindFull(document, "mple += 1", "simple", ExpressionContext.MethodBody);
} }
[Test] [Test]
public void SimpleBeginningOfExpression() public void SimpleBeginningOfExpression()
{ {
FindFull(document, "simple += 1", "simple", ExpressionContext.StatementStart); FindFull(document, "simple += 1", "simple", ExpressionContext.MethodBody);
} }
[Test] [Test]
@ -165,6 +165,8 @@ class Main {
} else if (boolVar) { } else if (boolVar) {
} else if (arg > b) {
} }
List<string> a = new List<string> a = new
} }
@ -212,13 +214,19 @@ class Main {
[Test] [Test]
public void ConditionInIfStatement() public void ConditionInIfStatement()
{ {
FindFull(program3, "oolVar)", "boolVar", ExpressionContext.StatementStart); FindFull(program3, "oolVar)", "boolVar", ExpressionContext.MethodBody);
} }
[Test] [Test]
public void IdentifierFollowedByLessThan() public void IdentifierFollowedByLessThan()
{ {
FindFull(program3, "rg < b", "arg", ExpressionContext.StatementStart); FindFull(program3, "rg < b", "arg", ExpressionContext.MethodBody);
}
[Test]
public void IdentifierFollowedByGreaterThan()
{
FindFull(program3, "rg > b", "arg", ExpressionContext.MethodBody);
} }
} }
} }

5
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs

@ -147,7 +147,7 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp
} }
break; break;
case FrameType.Statements: case FrameType.Statements:
SetContext(ExpressionContext.StatementStart); SetContext(ExpressionContext.MethodBody);
break; break;
case FrameType.ParameterList: case FrameType.ParameterList:
SetContext(ExpressionContext.ParameterType); SetContext(ExpressionContext.ParameterType);
@ -302,6 +302,9 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp
if (frame.parent != null && frame.bracketType == '<') { if (frame.parent != null && frame.bracketType == '<') {
frame.type = FrameType.Popped; frame.type = FrameType.Popped;
frame = frame.parent; frame = frame.parent;
} else {
frame.lastExpressionStart = Location.Empty;
frame.SetDefaultContext();
} }
break; break;
case Tokens.Dot: case Tokens.Dot:

4
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs

@ -88,9 +88,9 @@ namespace ICSharpCode.SharpDevelop.Dom
/// <example>event EventHandler NameChanged { *expr* }</example> /// <example>event EventHandler NameChanged { *expr* }</example>
public static ExpressionContext EventDeclaration = new DefaultExpressionContext("EventDeclaration"); public static ExpressionContext EventDeclaration = new DefaultExpressionContext("EventDeclaration");
/// <summary>The context is the start of a new statement.</summary> /// <summary>The context is the body of a method.</summary>
/// <example>void Main () { *expr* }</example> /// <example>void Main () { *expr* }</example>
public static ExpressionContext StatementStart = new DefaultExpressionContext("StatementStart"); public static ExpressionContext MethodBody = new DefaultExpressionContext("MethodBody");
/// <summary>The context is the body of a type declaration.</summary> /// <summary>The context is the body of a type declaration.</summary>

2
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs

@ -1101,7 +1101,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
AddCSharpKeywords(result, NR.Parser.CSharp.Tokens.InterfaceLevel); AddCSharpKeywords(result, NR.Parser.CSharp.Tokens.InterfaceLevel);
AddCSharpPrimitiveTypes(result); AddCSharpPrimitiveTypes(result);
CtrlSpaceInternal(result, fileContent); CtrlSpaceInternal(result, fileContent);
} else if (context == ExpressionContext.StatementStart) { } else if (context == ExpressionContext.MethodBody) {
result.Add("var"); result.Add("var");
AddCSharpKeywords(result, NR.Parser.CSharp.Tokens.StatementStart); AddCSharpKeywords(result, NR.Parser.CSharp.Tokens.StatementStart);
AddCSharpPrimitiveTypes(result); AddCSharpPrimitiveTypes(result);

Loading…
Cancel
Save