Browse Source

Added pre processor "if"/"elif" contexts.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
1bc609ff79
  1. 20
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 1
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
  3. 2
      ICSharpCode.NRefactory.CSharp/Completion/ICompletionDataFactory.cs
  4. 6
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs
  5. 60
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/PreProcessorTests.cs
  6. 1
      ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj

20
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

@ -632,19 +632,21 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -632,19 +632,21 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
foreach (var variable in state.LocalVariables) {
wrapper.AddVariable (variable);
}
if (state.CurrentMember is IParameterizedMember) {
var param = (IParameterizedMember)state.CurrentMember;
if (currentMember is IParameterizedMember) {
var param = (IParameterizedMember)currentMember;
foreach (var p in param.Parameters) {
wrapper.AddVariable (p);
}
}
if (state.CurrentMember is IMethod) {
var method = (IMethod)state.CurrentMember;
if (currentMember is IMethod) {
var method = (IMethod)currentMember;
foreach (var p in method.TypeParameters) {
wrapper.AddTypeParameter (p);
}
}
Predicate<ITypeDefinition> typePred = null;
if (node is Attribute) {
var attribute = ctx.GetTypeDefinition ("System", "Attribute", 0, StringComparer.Ordinal);
@ -991,11 +993,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -991,11 +993,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
// }
// }
// return CreateCtrlSpaceCompletionData (completionContext, null);
// case "if":
// case "elif":
// if (stateTracker.Engine.IsInsidePreprocessorDirective)
// return GetDefineCompletionData ();
// return null;
case "if":
case "elif":
if (wordStart > 0 && document.GetCharAt (wordStart - 1) == '#')
return factory.CreatePreProcessorDefinesCompletionData ();
return null;
case "yield":
var yieldDataList = new CompletionDataWrapper (this);
DefaultCompletionString = "return";

1
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs

@ -72,7 +72,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -72,7 +72,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
currentMember = member;
}
}
var stack = GetBracketStack (GetMemberTextToCaret ().Item1);
if (stack.Count == 0)
currentMember = null;

2
ICSharpCode.NRefactory.CSharp/Completion/ICompletionDataFactory.cs

@ -63,5 +63,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -63,5 +63,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
ICompletionData CreateNewOverrideCompletionData (int declarationBegin, ITypeDefinition type, IMember m);
IEnumerable<ICompletionData> CreateCodeTemplateCompletionData ();
IEnumerable<ICompletionData> CreatePreProcessorDefinesCompletionData ();
}
}

6
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

@ -169,6 +169,12 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -169,6 +169,12 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
{
return Enumerable.Empty<ICompletionData> ();
}
public IEnumerable<ICompletionData> CreatePreProcessorDefinesCompletionData ()
{
yield return new CompletionData ("DEBUG");
yield return new CompletionData ("TEST");
}
#endregion
}

60
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/PreProcessorTests.cs

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
//
// PreProcessorTests.cs
//
// Author:
// Mike Krüger <mkrueger@xamarin.com>
//
// Copyright (c) 2011 Xamarin Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
{
public class PreProcessorTests: TestBase
{
[Test()]
public void TestPreProcessorContext ()
{
CodeCompletionBugTests.CombinedProviderTest (@"$#$", provider => {
Assert.IsNotNull (provider.Find ("if"), "directive 'if' not found.");
Assert.IsNotNull (provider.Find ("region"), "directive 'region' not found.");
});
}
[Test()]
public void TestPreProcessorContext2 ()
{
CodeCompletionBugTests.CombinedProviderTest (@"// $#$", provider => {
Assert.IsNull (provider.Find ("if"), "directive 'if' not found.");
Assert.IsNull (provider.Find ("region"), "directive 'region' not found.");
});
}
[Test()]
public void TestIfContext ()
{
CodeCompletionBugTests.CombinedProviderTest (@"$#if $", provider => {
Assert.IsNotNull (provider.Find ("DEBUG"), "define 'DEBUG' not found.");
});
}
}
}

1
ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj

@ -198,6 +198,7 @@ @@ -198,6 +198,7 @@
<Compile Include="CSharp\CodeCompletion\KeywordTests.cs" />
<Compile Include="CSharp\CodeCompletion\ObjectInitializerTests.cs" />
<Compile Include="CSharp\CodeCompletion\VariableDeclarationStatementTests.cs" />
<Compile Include="CSharp\CodeCompletion\PreProcessorTests.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ICSharpCode.NRefactory.CSharp\ICSharpCode.NRefactory.CSharp.csproj">

Loading…
Cancel
Save