private CompletionContext GetCompletionContext(IEditorView view) { var reader = view.GetReader(); var token = reader.ReadTokenReverse(); var completionContext = new CompletionContext(); if (token == null) { return(completionContext); } var tokenText = reader.PeekText(token.Length); if (token.Key == "Identifier" || (token.Key == "Punctuation" && tokenText == ".")) { var memberExpression = DetermineFullMemberExpression(tokenText, reader); if (memberExpression.Contains(".")) { completionContext.IsObjectMember = true; } if (memberExpression.StartsWith("this.")) { completionContext.IsDocumentProperty = true; var completedPath = memberExpression.Substring("this.".Length); var lastDot = completedPath.LastIndexOf('.'); completedPath = lastDot >= 0 ? completedPath.Substring(0, lastDot) : ""; completionContext.CompletedPropertyPath = completedPath; } } return(completionContext); }
protected virtual CompletionContext GetCompletionContext(IEditorView view) { var reader = view.GetReader(); var token = reader.ReadTokenReverse(); var completionContext = new CompletionContext(); if (token == null) return completionContext; var tokenText = reader.PeekText(token.Length); if (token.Key == "Identifier" || (token.Key == "Punctuation" && tokenText == ".")) { var memberExpression = DetermineFullMemberExpression(tokenText, reader); if (memberExpression.Contains(".")) completionContext.IsObjectMember = true; if (memberExpression.StartsWith("this.")) { completionContext.IsDocumentProperty = true; var completedPath = memberExpression.Substring("this.".Length); var lastDot = completedPath.LastIndexOf('.'); completedPath = lastDot >= 0 ? completedPath.Substring(0, lastDot) : ""; completionContext.CompletedPropertyPath = completedPath; } } return completionContext; }
private static CompletionContext GetCompletionContext(IEditorView view) { var reader = view.GetReader(); var hasSkippedWhitespace = false; while (true) { var token = reader.ReadTokenReverse(); if (token == null) { return(new CompletionContext()); } if (token.Key == "Whitespace") { hasSkippedWhitespace = true; continue; } var tokenText = reader.PeekText(token.Length); if (token.Key == "Field") { return new CompletionContext() { Field = GetFieldName(tokenText), Prefix = "" } } ; if ((token.Key == "Operator" && preTermOperators.Contains(tokenText)) || token.Key == "OpenQuotes" || token.Key == "RangeQueryStart") { var field = FindPrecedingField(reader); return(new CompletionContext() { Field = field, Prefix = "" }); } if (!hasSkippedWhitespace && (token.Key == "Value" || token.Key == "StringText")) { var field = FindPrecedingField(reader); return(new CompletionContext() { Field = field, Prefix = tokenText }); } return(new CompletionContext()); } }
private static string GetCurrentInterestingToken(IEditorView view) { var textSnapshotReader = view.GetReader(); while (true) { var lastToken = textSnapshotReader.ReadTokenReverse(); if (lastToken == null) return null; var currentInterestingToken = textSnapshotReader.ReadText(lastToken.Length); textSnapshotReader.ReadTokenReverse(); // reset the reading of the text if(string.IsNullOrWhiteSpace(currentInterestingToken) == false) return currentInterestingToken; } }
private static string GetCurrentInterestingToken(IEditorView view) { var textSnapshotReader = view.GetReader(); while (true) { var lastToken = textSnapshotReader.ReadTokenReverse(); if (lastToken == null) { return(null); } var currentInterestingToken = textSnapshotReader.ReadText(lastToken.Length); textSnapshotReader.ReadTokenReverse(); // reset the reading of the text if (string.IsNullOrWhiteSpace(currentInterestingToken) == false) { return(currentInterestingToken); } } }
private static CompletionContext GetCompletionContext(IEditorView view) { var reader = view.GetReader(); var hasSkippedWhitespace = false; while (true) { var token = reader.ReadTokenReverse(); if (token == null) return new CompletionContext(); if (token.Key == "Whitespace") { hasSkippedWhitespace = true; continue; } var tokenText = reader.PeekText(token.Length); if (token.Key == "Field") return new CompletionContext {Field = GetFieldName(tokenText), Prefix = ""}; if ((token.Key == "Operator" && preTermOperators.Contains(tokenText)) || token.Key == "OpenQuotes" || token.Key == "RangeQueryStart") { var field = FindPrecedingField(reader); return new CompletionContext {Field = field, Prefix = ""}; } if (!hasSkippedWhitespace && (token.Key == "Value" || token.Key == "StringText") ) { var field = FindPrecedingField(reader); return new CompletionContext { Field = field, Prefix = tokenText }; } return new CompletionContext(); } }
///////////////////////////////////////////////////////////////////////////////////////////////////// // NON-PUBLIC PROCEDURES ///////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Returns parameter info context information for the current offset in the view. /// </summary> /// <param name="view">The view to examine.</param> /// <returns>Parameter info context information for the current offset in the view.</returns> private Context CreateContext(IEditorView view) { // Get a reader var reader = view.GetReader(); if (!reader.IsAtTokenStart) { reader.GoToCurrentTokenStart(); } // Loop backwards and examine tokens int?argumentIndex = null; var parenthesisLevel = 0; var token = reader.ReadTokenReverse(); var tokenCount = 0; while (token != null) { // Quit if reading too many tokens if (tokenCount > 100) { return(null); } // Use IDs for better performance if your lexer assigns token IDs switch (token.Key) { case "CloseParenthesis": parenthesisLevel++; break; case "Comma": if (argumentIndex.HasValue) { argumentIndex++; } else { argumentIndex = 1; } break; case "OpenParenthesis": if (--parenthesisLevel < 0) { if (!argumentIndex.HasValue) { argumentIndex = 0; } // Create a context object var context = new Context(); context.ArgumentIndex = argumentIndex.Value; context.ArgumentListOffset = token.EndOffset; // Ensure a 'Foo' identifier is before the '(' (hardcoded like this for this sample) token = reader.ReadTokenReverse(); if ((token != null) && (token.Key == "Identifier") && (reader.TokenText == "Foo")) { context.InvocationName = reader.TokenText; return(context); } else { return(null); } } break; } token = reader.ReadTokenReverse(); tokenCount++; } return(null); }