From 82fba3088f99b69276c7c4464303ff75ac7df780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Wed, 6 Feb 2013 06:30:56 +0100 Subject: [PATCH] Fixed pre processor context completion. --- .../Completion/CSharpCompletionEngine.cs | 11 ++++++-- .../CodeCompletion/PreProcessorTests.cs | 25 ++++++++++++++----- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 46d2f23740..500c743024 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -419,8 +419,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion int tokenIndex = offset; string token = GetPreviousToken(ref tokenIndex, false); if (IsInsideCommentStringOrDirective()) { - if (IsInPreprocessorDirective()) - return HandleKeywordCompletion(tokenIndex, token); return null; } // check propose name, for context (but only in control space context) @@ -619,6 +617,15 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // Automatic completion default: if (IsInsideCommentStringOrDirective()) { + tokenIndex = offset; + token = GetPreviousToken(ref tokenIndex, false); + if (IsInPreprocessorDirective() && (token.Length == 1 || controlSpace)) { + while (token != null && document.GetCharAt (tokenIndex - 1) != '#') { + token = GetPreviousToken(ref tokenIndex, false); + } + if (token != null) + return HandleKeywordCompletion(tokenIndex, token); + } return null; } if (IsInLinqContext(offset)) { diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/PreProcessorTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/PreProcessorTests.cs index 7edc9d3150..72ea1b0555 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/PreProcessorTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/PreProcessorTests.cs @@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion { public class PreProcessorTests: TestBase { - [Test()] + [Test] public void TestPreProcessorContext () { CodeCompletionBugTests.CombinedProviderTest (@"$#$", provider => { @@ -39,7 +39,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion }); } - [Test()] + [Test] public void TestPreProcessorContext2 () { CodeCompletionBugTests.CombinedProviderTest (@"// $#$", provider => { @@ -49,20 +49,33 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion } - [Test()] + [Test] public void TestIfContext () { - CodeCompletionBugTests.CombinedProviderTest (@"$#if $", provider => { + CodeCompletionBugTests.CombinedProviderTest (@"$#if D$", provider => { Assert.IsNotNull (provider.Find ("DEBUG"), "define 'DEBUG' not found."); }); } - [Test()] + [Test] public void TestIfInsideComment () { - CodeCompletionBugTests.CombinedProviderTest (@"$// #if $", provider => { + CodeCompletionBugTests.CombinedProviderTest (@"$// #if D$", provider => { Assert.IsNull (provider.Find ("DEBUG"), "define 'DEBUG' found."); }); + } + + /// + /// Bug 10051 - Cannot type negate conditional + /// + [Test] + public void TestBug10051 () + { + var provider = CodeCompletionBugTests.CreateProvider (@"$#if $"); + Assert.IsTrue (provider == null || provider.Count == 0); + + provider = CodeCompletionBugTests.CreateProvider (@"$#if $", true); + Assert.IsNotNull (provider.Find ("DEBUG"), "define 'DEBUG' not found."); } } }