@Override public Result postProcessEnter(@NotNull PsiFile file, @NotNull Editor editor, @NotNull DataContext dataContext) { if (!file.getLanguage().is(BallerinaLanguage.INSTANCE)) { return Result.Continue; } // We need to save the file before checking. Otherwise issues can occur when we press enter in a string. Project project = file.getProject(); PsiDocumentManager.getInstance(project).commitDocument(editor.getDocument()); // Checks whether the previous line starts with "#". LogicalPosition caretPos = editor.getCaretModel().getLogicalPosition(); int prevLine = caretPos.line - 1; String lineString = editor.getDocument().getText( new TextRange(editor.getDocument().getLineStartOffset(prevLine), editor.getDocument().getLineEndOffset(prevLine))); if (lineString.trim().startsWith("#")) { int newCol = lineString.indexOf("#"); String enteredText = editor.getDocument().getText( new TextRange(editor.getDocument().getLineStartOffset(caretPos.line), editor.getDocument().getLineEndOffset(caretPos.line))).trim(); editor.getDocument().deleteString(editor.getDocument().getLineStartOffset(caretPos.line), editor.getDocument().getLineEndOffset(caretPos.line)); editor.getCaretModel().moveToLogicalPosition(new LogicalPosition(caretPos.line, 1)); enterNewLine(editor, enteredText, newCol); // Commit the document. PsiDocumentManager.getInstance(project).commitDocument(editor.getDocument()); } return Result.Continue; }
private boolean firstOnLine(@NotNull ASTNode node) { Document document = document(node.getPsi()); assert document != null; int nodeStartOffset = node.getStartOffset(); int lineNumber = document.getLineNumber(nodeStartOffset); int lineStartOffset = document.getLineStartOffset(lineNumber); String prefix = document.getText(new TextRange(lineStartOffset, nodeStartOffset)); return isWhitespace(prefix); }
@Override public void handleInsert(@NotNull InsertionContext context, LookupElement item) { Editor editor = context.getEditor(); int tailOffset = context.getTailOffset(); Document document = editor.getDocument(); context.commitDocument(); boolean staysAtChar = document.getTextLength() > tailOffset && document.getCharsSequence().charAt(tailOffset) == myChar; context.setAddCompletionChar(false); if (!staysAtChar) { document.insertString(tailOffset, String.valueOf(myChar)); } editor.getCaretModel().moveToOffset(tailOffset + 1); AutoPopupController.getInstance(context.getProject()).scheduleAutoPopup(editor); } }
/** * Gets the actual number of characters in the file * * @param editor The editor * @param includeEndNewLine True include newline * @return The file's character count */ public static int getFileSize(@NotNull final Editor editor, final boolean includeEndNewLine) { final int len = editor.getDocument().getTextLength(); return includeEndNewLine || len == 0 || editor.getDocument().getCharsSequence().charAt(len - 1) != '\n' ? len : len - 1; }
/** * Gets the number of actual lines in the file * * @param editor The editor * @return The file line count */ public static int getLineCount(@NotNull final Editor editor) { int len = editor.getDocument().getLineCount(); if (editor.getDocument().getTextLength() > 0 && editor.getDocument().getCharsSequence().charAt(editor.getDocument().getTextLength() - 1) == '\n') { len--; } return len; }
@NotNull public static CharacterPosition offsetToCharacterPosition(@NotNull final Editor editor, final int offset) { int line = editor.getDocument().getLineNumber(normalizeOffset(editor, offset)); int col = offset - editor.getDocument().getLineStartOffset(line); return new CharacterPosition(line, col); }
@Override public void documentChanged(@NotNull DocumentEvent event) { templatesListPanel.updateContent(event.getDocument().getText()); } });
int offset = document.getTextLength(); VisualPosition position = editors[0].getSelectionModel().getSelectionStartPosition(); if (position != null) { offset = document.getLineStartOffset(position.line); if (ignoreDuplicates) { List<String> currentLines = ContainerUtil.filter( document.getText().split(Constants.NEWLINE), s -> !s.isEmpty() && !s.startsWith(Constants.HASH) ); entry += Constants.NEWLINE; if (!insertAtCursor && !document.getText().endsWith(Constants.NEWLINE) && !StringUtil.isEmpty(entry)) { entry = Constants.NEWLINE + entry; document.insertString(offset, entry); offset += entry.length();
private static boolean isLineBreakpointAvailable(@NotNull VirtualFile file, int line, @NotNull Project project) { Document document = FileDocumentManager.getInstance().getDocument(file); if (document == null || document.getLineEndOffset(line) == document.getLineStartOffset(line)) { return false; } Checker canPutAtChecker = new Checker(); XDebuggerUtil.getInstance().iterateLine(project, document, line, canPutAtChecker); // Used to identify line comments, which cannot be correctly processed by the checker. if (document.getText(new TextRange(document.getLineStartOffset(line), document.getLineEndOffset(line))).trim() .startsWith(BALLERINA_LINE_COMMENT_PREFIX)) { return false; } return canPutAtChecker.isLineBreakpointAvailable(); }
@Override public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { try { PsiElement element = descriptor.getPsiElement(); Document document = PsiDocumentManager.getInstance(project).getDocument(element.getContainingFile()); List<Integer> quotePositions = new ArrayList<>(); int quotePosition = CsvIntentionHelper.getOpeningQuotePosition(element); if (quotePosition != -1) { quotePositions.add(quotePosition); } PsiElement endSeparatorElement = CsvIntentionHelper.findQuotePositionsUntilSeparator(element, quotePositions); if (endSeparatorElement == null) { quotePositions.add(document.getTextLength()); } else { quotePositions.add(endSeparatorElement.getTextOffset()); } String text = CsvIntentionHelper.addQuotes(document.getText(), quotePositions); document.setText(text); } catch (IncorrectOperationException e) { LOG.error(e); } } }
private static boolean isLineBreakpointAvailable(@NotNull VirtualFile file, int line, @NotNull Project project) { Document document = FileDocumentManager.getInstance().getDocument(file); if (document == null || document.getLineEndOffset(line) == document.getLineStartOffset(line)) return false; Checker canPutAtChecker = new Checker(); XDebuggerUtil.getInstance().iterateLine(project, document, line, canPutAtChecker); return canPutAtChecker.isLineBreakpointAvailable(); }
@Override public boolean autoImportReferenceAtCursor(@NotNull Editor editor, @NotNull PsiFile file) { if (!file.getViewProvider().getLanguages().contains(GoLanguage.INSTANCE) || !DaemonListeners.canChangeFileSilently(file)) { return false; } int caretOffset = editor.getCaretModel().getOffset(); Document document = editor.getDocument(); int lineNumber = document.getLineNumber(caretOffset); int startOffset = document.getLineStartOffset(lineNumber); int endOffset = document.getLineEndOffset(lineNumber); List<PsiElement> elements = CollectHighlightsUtil.getElementsInRange(file, startOffset, endOffset); for (PsiElement element : elements) { if (element instanceof GoCompositeElement) { for (PsiReference reference : element.getReferences()) { GoImportPackageQuickFix fix = new GoImportPackageQuickFix(reference); if (fix.doAutoImportOrShowHint(editor, false)) { return true; } } } } return false; }
@Override public void handleInsert(@NotNull InsertionContext context, @NotNull LookupElement item) { int tailOffset = context.getTailOffset(); Document document = context.getDocument(); int documentTextLength = document.getTextLength(); boolean insertParentheses; if (documentTextLength > tailOffset) { String currentTail = document.getText( new TextRange(tailOffset, tailOffset + 1) ); char firstChar = currentTail.charAt(0); insertParentheses = firstChar != ' ' && firstChar != '(' && firstChar != '['; } else { insertParentheses = true; } if (insertParentheses) { context.getDocument().insertString(tailOffset, "()"); // + 1 to put between the `(` and `)` context.getEditor().getCaretModel().moveToOffset(tailOffset + 1); } } }
public boolean execute(@NotNull Editor editor, @NotNull DataContext context, @NotNull ExCommand cmd) throws ExException { LineRange range = cmd.getLineRange(editor, context); CharSequence chars = editor.getDocument().getCharsSequence(); for (int l = range.getStartLine(); l <= range.getEndLine(); l++) { int start = editor.getDocument().getLineStartOffset(l); int end = editor.getDocument().getLineEndOffset(l); if (logger.isDebugEnabled()) { logger.debug("Line " + l + ", start offset=" + start + ", end offset=" + end); for (int i = start; i <= end; i++) { logger.debug("Offset " + i + ", char=" + chars.charAt(i) + ", lp=" + editor.offsetToLogicalPosition(i) + ", vp=" + editor.offsetToVisualPosition(i)); } } } return true; }
PsiElement rbrace = block.getRbrace(); int lbraceEndOffset = lbrace.getTextRange().getEndOffset(); int startLine = document.getLineNumber(lbraceEndOffset); int endLine = rbrace != null ? document.getLineNumber(rbrace.getTextRange().getStartOffset()) : startLine; int lineDiff = endLine - startLine; if (lineDiff < 2) { document.insertString(lbraceEndOffset, StringUtil.repeat("\n", 2 - lineDiff)); int offsetToMove = document.getLineStartOffset(startLine + 1); context.getEditor().getCaretModel().moveToOffset(offsetToMove); CodeStyleManager.getInstance(context.getProject()).adjustLineIndent(document, offsetToMove);
private static int getLineOffset(Document document, final int offset) { return 0 <= offset && offset < document.getTextLength() ? document.getLineStartOffset(document.getLineNumber(offset)) : 0; } }
@NotNull private static String excerpt(@NotNull PsiFile containingFile, @NotNull PsiElement element) { StringBuilder excerptBuilder = new StringBuilder(); excerptBuilder.append('\n'); excerptBuilder.append("### Excerpt\n"); excerptBuilder.append('\n'); excerptBuilder.append("```\n"); excerptBuilder.append(element.getText()); excerptBuilder.append('\n'); excerptBuilder.append("```\n"); FileViewProvider fileViewProvider = containingFile.getViewProvider(); Document document = fileViewProvider.getDocument(); if (document != null) { TextRange textRange = element.getTextRange(); int startingLine = document.getLineNumber(textRange.getStartOffset()); int endingLine = document.getLineNumber(textRange.getEndOffset()); excerptBuilder.append(" Line(s) "); excerptBuilder.append(startingLine); excerptBuilder.append('-'); excerptBuilder.append(endingLine); VirtualFile virtualFile = containingFile.getVirtualFile(); if (virtualFile != null) { excerptBuilder.append(" in "); excerptBuilder.append(virtualFile.getPath()); } excerptBuilder.append("\n"); } return excerptBuilder.toString(); }
@Override protected void run() throws Throwable { int position = document.getLineEndOffset(document.getLineNumber(anchorOffset)); document.insertString(position, text); } }.execute();
int start = editor.getDocument().getLineStartOffset(line1); int end = editor.getDocument().getLineEndOffset(line2); editor.getDocument().replaceString(startoff, endoff, match); lastMatch = startoff; newpos = EditorHelper.offsetToCharacterPosition(editor, newend);