From 63367b955be01b333b24a02cc7e4845acff2b19c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Tue, 6 Dec 2011 11:19:10 +0100 Subject: [PATCH] Fixed some keyword cc tests. --- .../Completion/CSharpCompletionEngine.cs | 16 +++-- .../CSharp/CodeCompletion/KeywordTests.cs | 64 +++++++++++++++++-- 2 files changed, 70 insertions(+), 10 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 7ed836a1ac..fdc677a912 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -431,12 +431,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // Do not pop up completion on identifier identifier (should be handled by keyword completion). tokenIndex = offset - 1; token = GetPreviousToken (ref tokenIndex, false); - if (identifierStart == null && !string.IsNullOrEmpty (token) && !(IsInsideComment (tokenIndex) || IsInsideString (tokenIndex))) { + int prevTokenIndex = tokenIndex; + var prevToken2 = GetPreviousToken (ref prevTokenIndex, false); + if (identifierStart == null && !string.IsNullOrEmpty (token) && !(IsInsideComment (tokenIndex) || IsInsideString (tokenIndex)) && (prevToken2 == ";" || prevToken2 == "{" || prevToken2 == "}")) { + Console.WriteLine ("!"); char last = token [token.Length - 1]; if (char.IsLetterOrDigit (last) || last == '_' || token == ">") { return HandleKeywordCompletion (tokenIndex, token); - - //return controlSpace ? DefaultControlSpaceItems () : null; } } if (identifierStart == null) @@ -622,6 +623,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion IEnumerable DefaultControlSpaceItems () { var wrapper = new CompletionDataWrapper (this); + if (offset >= document.TextLength) + offset = document.TextLength - 1; while (offset > 1 && char.IsWhiteSpace (document.GetCharAt (offset))) { offset--; } @@ -674,10 +677,10 @@ namespace ICSharpCode.NRefactory.CSharp.Completion AddTypesAndNamespaces (wrapper, state, node, typePred); wrapper.Result.Add (factory.CreateLiteralCompletionData ("global")); - if (state.CurrentMember != null) { + if (currentMember != null) { AddKeywords (wrapper, statementStartKeywords); AddKeywords (wrapper, expressionLevelKeywords); - } else if (state.CurrentTypeDefinition != null) { + } else if (currentType != null) { AddKeywords (wrapper, typeLevelKeywords); } else { AddKeywords (wrapper, globalLevelKeywords); @@ -2082,7 +2085,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion "true", "false", "typeof", "checked", "unchecked", "from", "break", "checked", "unchecked", "const", "continue", "do", "finally", "fixed", "for", "foreach", "goto", "if", "lock", "return", "stackalloc", "switch", "throw", "try", "unsafe", - "using", "while", "yield", "dynamic", "var" }; + "using", "while", "yield", "dynamic", "var", "dynamic" + }; static string[] globalLevelKeywords = new string [] { "namespace", "using", "extern", "public", "internal", "class", "interface", "struct", "enum", "delegate", diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs index 9cd25ac8b0..4fc1746351 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs @@ -161,7 +161,6 @@ class Test }); } - [Ignore("needs to be fixed in parser.")] [Test()] public void IsAsKeywordTest () { @@ -196,7 +195,6 @@ provider => { }); } - [Ignore()] [Test()] public void PublicClassContextTest2 () { @@ -209,7 +207,6 @@ provider => { }); } - [Ignore()] [Test()] public void PublicClassContextTestContinuation1 () { @@ -220,7 +217,6 @@ provider => { }); } - [Ignore()] [Test()] public void PublicClassContextTestContinuation2 () { @@ -231,6 +227,66 @@ provider => { }); } + [Test()] + public void StatementKeywordTests () + { + CodeCompletionBugTests.CombinedProviderTest ( +@"using System; +class Test +{ + public void MyMethod () + { + $s$ +} +", (provider) => { + Assert.IsNotNull (provider.Find ("bool"), "keyword 'bool' not found."); + Assert.IsNotNull (provider.Find ("char"), "keyword 'char' not found."); + Assert.IsNotNull (provider.Find ("byte"), "keyword 'byte' not found."); + Assert.IsNotNull (provider.Find ("sbyte"), "keyword 'sbyte' not found."); + Assert.IsNotNull (provider.Find ("int"), "keyword 'int' not found."); + Assert.IsNotNull (provider.Find ("uint"), "keyword 'uint' not found."); + Assert.IsNotNull (provider.Find ("short"), "keyword 'short' not found."); + Assert.IsNotNull (provider.Find ("ushort"), "keyword 'ushort' not found."); + Assert.IsNotNull (provider.Find ("long"), "keyword 'long' not found."); + Assert.IsNotNull (provider.Find ("ulong"), "keyword 'ulong' not found."); + Assert.IsNotNull (provider.Find ("float"), "keyword 'float' not found."); + Assert.IsNotNull (provider.Find ("double"), "keyword 'double' not found."); + Assert.IsNotNull (provider.Find ("decimal"), "keyword 'decimal' not found."); + + Assert.IsNotNull (provider.Find ("const"), "keyword 'const' not found."); + Assert.IsNotNull (provider.Find ("dynamic"), "keyword 'dynamic' not found."); + Assert.IsNotNull (provider.Find ("var"), "keyword 'var' not found."); + + Assert.IsNotNull (provider.Find ("do"), "keyword 'do' not found."); + Assert.IsNotNull (provider.Find ("while"), "keyword 'while' not found."); + Assert.IsNotNull (provider.Find ("for"), "keyword 'for' not found."); + Assert.IsNotNull (provider.Find ("foreach"), "keyword 'foreach' not found."); + + Assert.IsNotNull (provider.Find ("goto"), "keyword 'goto' not found."); + Assert.IsNotNull (provider.Find ("break"), "keyword 'break' not found."); + Assert.IsNotNull (provider.Find ("continue"), "keyword 'continue' not found."); + Assert.IsNotNull (provider.Find ("return"), "keyword 'return' not found."); + Assert.IsNotNull (provider.Find ("throw"), "keyword 'throw' not found."); + + Assert.IsNotNull (provider.Find ("fixed"), "keyword 'fixed' not found."); + Assert.IsNotNull (provider.Find ("using"), "keyword 'using' not found."); + Assert.IsNotNull (provider.Find ("lock"), "keyword 'lock' not found."); + + Assert.IsNotNull (provider.Find ("true"), "keyword 'true' not found."); + Assert.IsNotNull (provider.Find ("false"), "keyword 'false' not found."); + + Assert.IsNotNull (provider.Find ("null"), "keyword 'null' not found."); + + Assert.IsNotNull (provider.Find ("typeof"), "keyword 'typeof' not found."); + Assert.IsNotNull (provider.Find ("sizeof"), "keyword 'sizeof' not found."); + + Assert.IsNotNull (provider.Find ("from"), "keyword 'from' not found."); + Assert.IsNotNull (provider.Find ("yield"), "keyword 'yield' not found."); + + Assert.IsNotNull (provider.Find ("new"), "keyword 'new' not found."); + }); + } + } }