Browse Source

Added distinct color for the 'var' context sensitive keyword.

pull/32/merge
Mike Krüger 12 years ago
parent
commit
a6e4150637
  1. 18
      ICSharpCode.NRefactory.CSharp/Analysis/SemanticHighlightingVisitor.cs
  2. 28
      ICSharpCode.NRefactory.Tests/CSharp/Analysis/SemanticHighlightingTests.cs

18
ICSharpCode.NRefactory.CSharp/Analysis/SemanticHighlightingVisitor.cs

@ -62,7 +62,8 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis @@ -62,7 +62,8 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis
protected TColor valueKeywordColor;
protected TColor externAliasKeywordColor;
protected TColor varKeywordTypeColor;
/// <summary>
/// Used for 'in' modifiers on type parameters.
/// </summary>
@ -97,6 +98,11 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis @@ -97,6 +98,11 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis
return;
}
if (rr is TypeResolveResult) {
if (blockDepth > 0 && identifier.Name == "var" && rr.Type.Kind != TypeKind.Null && rr.Type.Name != "var" ) {
Colorize(identifier, varKeywordTypeColor);
return;
}
TColor color;
if (TryGetTypeHighlighting (rr.Type.Kind, out color)) {
Colorize(identifier, color);
@ -579,7 +585,7 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis @@ -579,7 +585,7 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis
Colorize(comment, inactiveCodeColor);
}
}
public override void VisitPreProcessorDirective(PreProcessorDirective preProcessorDirective)
{
}
@ -608,5 +614,13 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis @@ -608,5 +614,13 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis
}
}
}
int blockDepth;
public override void VisitBlockStatement(BlockStatement blockStatement)
{
blockDepth++;
base.VisitBlockStatement(blockStatement);
blockDepth--;
}
}
}

28
ICSharpCode.NRefactory.Tests/CSharp/Analysis/SemanticHighlightingTests.cs

@ -89,6 +89,8 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis @@ -89,6 +89,8 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis
var syntaxTree = SyntaxTree.Parse (text, "a.cs");
if (syntaxTree.Errors.Count > 0) {
Console.WriteLine (text);
Console.WriteLine("---");
syntaxTree.Errors.ForEach (err => Console.WriteLine (err.Message));
Assert.Fail ("parse error.");
}
var project = new CSharpProjectContent().AddAssemblyReferences(new [] { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore });
@ -319,8 +321,32 @@ class Class { @@ -319,8 +321,32 @@ class Class {
}
[Test]
public void TestVarColorUserTypeCase()
{
string code =@"class var {
$var aVar;
public static void Main ()
{
$var a = new $var ();
}
}
";
TestColor (code, referenceTypeColor);
}
[Test]
public void TestVarColor()
{
TestColor (@"class MyClass {
public static void Main ()
{
$var a = 344;
foreach ($var b in new [] { 1,2, 3}) {}
}
}
", varKeywordTypeColor);
}
}
}

Loading…
Cancel
Save