Beispiel #1
0
        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();
            }
        }
Beispiel #7
0
        /////////////////////////////////////////////////////////////////////////////////////////////////////
        // 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);
        }