Browse Source

Fixed pre processor context completion.

pull/32/merge
Mike Krüger 13 years ago
parent
commit
82fba3088f
  1. 11
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 25
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/PreProcessorTests.cs

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

@ -419,8 +419,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -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 <variable name> <ctrl+space> (but only in control space context)
@ -619,6 +617,15 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -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)) {

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

@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -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 @@ -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 @@ -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.");
});
}
/// <summary>
/// Bug 10051 - Cannot type negate conditional
/// </summary>
[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.");
}
}
}

Loading…
Cancel
Save