From e7e141401bbcd8979027bd2ca983a3207c15f1ce Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 18 Jul 2010 10:07:15 +0000 Subject: [PATCH] enabled completing existing expressions on ctrl+space git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/vbnet@6136 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/CompletionDataHelper.cs | 8 ++++++++ .../Project/Src/VBNetCompletionBinding.cs | 18 +++++------------- .../Src/Lexer/VBNet/ExpressionFinder.atg | 2 +- .../Project/Src/Lexer/VBNet/Parser.cs | 15 ++++++++------- .../Project/Src/Lexer/VBNet/PushParser.frame | 12 ++++++------ src/Main/Base/Test/VBExpressionFinderTests.cs | 2 +- 6 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/CompletionDataHelper.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/CompletionDataHelper.cs index 39bde1dbc9..2477b82997 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/CompletionDataHelper.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/CompletionDataHelper.cs @@ -62,6 +62,14 @@ namespace ICSharpCode.VBNetBinding if (addedKeywords) AddTemplates(editor, result); + if (pressedKey == '\0') { // ctrl+space + char prevChar = editor.Caret.Offset > 0 ? editor.Document.GetCharAt(editor.Caret.Offset - 1) : '\0'; + string word = char.IsLetterOrDigit(prevChar) || prevChar == '_' ? editor.GetWordBeforeCaret() : ""; + + if (!string.IsNullOrWhiteSpace(word)) + result.PreselectionLength = word.Length; + } + return result; } diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs index 64a3bad6e6..55b360d2d1 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs @@ -46,10 +46,6 @@ namespace ICSharpCode.VBNetBinding editor.Document.Remove(editor.SelectionStart, editor.SelectionLength); } - if (ch == ' ') { - - } - VBNetExpressionFinder ef = new VBNetExpressionFinder(ParserService.GetParseInformation(editor.FileName)); ExpressionResult result; @@ -211,15 +207,11 @@ namespace ICSharpCode.VBNetBinding prevChar = cursor > 1 ? editor.Document.GetCharAt(cursor - 1) : ' '; } - if (!char.IsLetterOrDigit(prevChar) && prevChar != '.') { - VBNetExpressionFinder ef = new VBNetExpressionFinder(ParserService.GetParseInformation(editor.FileName)); - ExpressionResult result = ef.FindExpression(editor.Document.Text, cursor); - LoggingService.Debug("CC: Beginning to type a word, result=" + result + ", context=" + result.Context); - editor.ShowCompletionWindow(CompletionDataHelper.GenerateCompletionData(result, editor, ' ')); - return true; - } - - return false; + VBNetExpressionFinder ef = new VBNetExpressionFinder(ParserService.GetParseInformation(editor.FileName)); + ExpressionResult result = ef.FindExpression(editor.Document.Text, cursor); + LoggingService.Debug("CC: Beginning to type a word, result=" + result + ", context=" + result.Context); + editor.ShowCompletionWindow(CompletionDataHelper.GenerateCompletionData(result, editor, '\0')); + return true; } } } diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.atg b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.atg index cf8d3a9913..daf000dee3 100644 --- a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.atg +++ b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.atg @@ -945,7 +945,7 @@ Statement = VariableDeclarationStatement = ( "Dim" | "Static" | "Const" ) - (. PushContext(Context.Identifier, la, t); .) + (. PushContext(Context.Identifier, la, t); .) (.OnEachPossiblePath: SetIdentifierExpected(la); .) Identifier (. PopContext(); .) [ "?" ] [ ( "(" { "," } ")" ) ] { "," (. PushContext(Context.Identifier, la, t); .) (.OnEachPossiblePath: SetIdentifierExpected(la); .) diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Parser.cs b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Parser.cs index a569e8a210..03284ba36a 100644 --- a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Parser.cs +++ b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Parser.cs @@ -1333,13 +1333,13 @@ partial class ExpressionFinder { public void InformToken(Token la) { - if (la != null) { - nextTokenIsPotentialStartOfExpression = false; - readXmlIdentifier = false; - nextTokenIsStartOfImportsOrAccessExpression = false; + nextTokenIsPotentialStartOfExpression = false; + readXmlIdentifier = false; + nextTokenIsStartOfImportsOrAccessExpression = false; + wasQualifierTokenAtStart = false; + + //if (la != null) identifierExpected = false; - wasQualifierTokenAtStart = false; - } switchlbl: switch (currentState) { case 0: { PushContext(Context.Global, la, t); @@ -4814,7 +4814,8 @@ partial class ExpressionFinder { } } case 335: { - PushContext(Context.Identifier, la, t); + PushContext(Context.Identifier, la, t); + SetIdentifierExpected(la); stateStack.Push(336); goto case 154; } diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/PushParser.frame b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/PushParser.frame index fe510ae9e4..7b11da50ed 100644 --- a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/PushParser.frame +++ b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/PushParser.frame @@ -67,13 +67,13 @@ partial class ExpressionFinder { public void InformToken(Token la) { - if (la != null) { - nextTokenIsPotentialStartOfExpression = false; - readXmlIdentifier = false; - nextTokenIsStartOfImportsOrAccessExpression = false; + nextTokenIsPotentialStartOfExpression = false; + readXmlIdentifier = false; + nextTokenIsStartOfImportsOrAccessExpression = false; + wasQualifierTokenAtStart = false; + + //if (la != null) identifierExpected = false; - wasQualifierTokenAtStart = false; - } -->informToken if (la != null) t = la; } diff --git a/src/Main/Base/Test/VBExpressionFinderTests.cs b/src/Main/Base/Test/VBExpressionFinderTests.cs index 51a268ed52..d57b0d2fc6 100644 --- a/src/Main/Base/Test/VBExpressionFinderTests.cs +++ b/src/Main/Base/Test/VBExpressionFinderTests.cs @@ -91,7 +91,7 @@ End Class [Test] public void FindSimple() { - Find(program2, "sole", 0,"Con", ExpressionContext.MethodBody); + Find(program2, "sole", 0, "Con", ExpressionContext.MethodBody); } [Test]