Example #1
0
        protected override bool CanFormatLine(int position, int lineOffset)
        {
            // Do not format inside strings. At this point AST may be empty due to the nature
            // of [destructive] changes made to the document. We have to resort to tokenizer.
            // In order to keep performance good during typing we'll use token stream from the classifier.
            var snapshot   = EditorBuffer.CurrentSnapshot;
            var lineNumber = snapshot.GetLineNumberFromPosition(position);
            var line       = snapshot.GetLineFromLineNumber(lineNumber + lineOffset);

            var classifier = RClassifierProvider.GetRClassifier(EditorBuffer.As <ITextBuffer>());
            var tokenIndex = classifier.Tokens.GetItemContaining(line.Start);

            return(tokenIndex < 0 || classifier.Tokens[tokenIndex].TokenType != RTokenType.String);
        }
Example #2
0
        private bool CanFormatLine(ITextBuffer textBuffer, int lineOffset)
        {
            // Do not format inside strings. At this point AST may be empty due to the nature
            // of [destructive] changes made to the document. We have to resort to tokenizer.
            // In order to keep performance good during typing we'll use token stream from the classifier.
            var caretPoint = _textView.GetCaretPosition(textBuffer);

            if (caretPoint.HasValue)
            {
                var snapshot   = textBuffer.CurrentSnapshot;
                int lineNumber = snapshot.GetLineNumberFromPosition(caretPoint.Value.Position);
                var line       = snapshot.GetLineFromLineNumber(lineNumber + lineOffset);

                var classifier = RClassifierProvider.GetRClassifier(textBuffer);
                var tokenIndex = classifier.Tokens.GetItemContaining(line.Start);

                return(tokenIndex < 0 || classifier.Tokens[tokenIndex].TokenType != RTokenType.String);
            }
            return(false);
        }