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); }
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); }