Search in sources :

Example 1 with PyElementGenerator

use of com.jetbrains.python.psi.PyElementGenerator in project intellij-community by JetBrains.

the class ReplaceOctalNumericLiteralQuickFix method applyFix.

@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
    PsiElement numericLiteralExpression = descriptor.getPsiElement();
    if (numericLiteralExpression instanceof PyNumericLiteralExpression) {
        PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project);
        String text = numericLiteralExpression.getText();
        numericLiteralExpression.replace(elementGenerator.createExpressionFromText("0o" + text.substring(1)));
    }
}
Also used : PyNumericLiteralExpression(com.jetbrains.python.psi.PyNumericLiteralExpression) PyElementGenerator(com.jetbrains.python.psi.PyElementGenerator) PsiElement(com.intellij.psi.PsiElement)

Example 2 with PyElementGenerator

use of com.jetbrains.python.psi.PyElementGenerator in project intellij-community by JetBrains.

the class UnresolvedRefAddFutureImportQuickFix method applyFix.

public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
    PsiElement element = descriptor.getPsiElement();
    PyFile file = (PyFile) element.getContainingFile();
    PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project);
    PyFromImportStatement statement = elementGenerator.createFromText(LanguageLevel.forElement(element), PyFromImportStatement.class, "from __future__ import with_statement");
    file.addBefore(statement, file.getStatements().get(0));
}
Also used : PyFromImportStatement(com.jetbrains.python.psi.PyFromImportStatement) PyFile(com.jetbrains.python.psi.PyFile) PyElementGenerator(com.jetbrains.python.psi.PyElementGenerator) PsiElement(com.intellij.psi.PsiElement)

Example 3 with PyElementGenerator

use of com.jetbrains.python.psi.PyElementGenerator in project intellij-community by JetBrains.

the class ChainedComparisonsQuickFix method applyFix.

private void applyFix(@NotNull PyBinaryExpression leftExpression, @NotNull PyBinaryExpression rightExpression, @NotNull Project project) {
    final PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project);
    final PyExpression newLeftExpression, newRightExpression;
    final String operator;
    if (myCommonIsInLeftLeft) {
        newLeftExpression = invertExpression(leftExpression, elementGenerator);
    } else {
        newLeftExpression = leftExpression;
    }
    if (myCommonIsInRightLeft) {
        operator = getLeftestOperator(rightExpression).getText();
        newRightExpression = getLargeRightExpression(rightExpression, project);
    } else {
        operator = invertOperator(assertNotNull(rightExpression.getPsiOperator()));
        final PyExpression rightLeftExpr = rightExpression.getLeftExpression();
        if (rightLeftExpr instanceof PyBinaryExpression) {
            newRightExpression = invertExpression((PyBinaryExpression) rightLeftExpr, elementGenerator);
        } else {
            newRightExpression = rightLeftExpr;
        }
    }
    final PyBinaryExpression binaryExpression = elementGenerator.createBinaryExpression(operator, newLeftExpression, newRightExpression);
    leftExpression.replace(binaryExpression);
    rightExpression.delete();
}
Also used : PyExpression(com.jetbrains.python.psi.PyExpression) PyElementGenerator(com.jetbrains.python.psi.PyElementGenerator) PyBinaryExpression(com.jetbrains.python.psi.PyBinaryExpression)

Example 4 with PyElementGenerator

use of com.jetbrains.python.psi.PyElementGenerator in project intellij-community by JetBrains.

the class ComparisonWithNoneQuickFix method applyFix.

public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
    PsiElement problemElement = descriptor.getPsiElement();
    if (problemElement instanceof PyBinaryExpression) {
        PyBinaryExpression binaryExpression = (PyBinaryExpression) problemElement;
        PyElementType operator = binaryExpression.getOperator();
        PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project);
        String temp;
        temp = (operator == PyTokenTypes.EQEQ) ? "is" : "is not";
        PyExpression expression = elementGenerator.createBinaryExpression(temp, binaryExpression.getLeftExpression(), binaryExpression.getRightExpression());
        binaryExpression.replace(expression);
    }
}
Also used : PyElementType(com.jetbrains.python.psi.PyElementType) PyExpression(com.jetbrains.python.psi.PyExpression) PyElementGenerator(com.jetbrains.python.psi.PyElementGenerator) PyBinaryExpression(com.jetbrains.python.psi.PyBinaryExpression) PsiElement(com.intellij.psi.PsiElement)

Example 5 with PyElementGenerator

use of com.jetbrains.python.psi.PyElementGenerator in project intellij-community by JetBrains.

the class ConvertDocstringQuickFix method applyFix.

public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
    PsiElement expression = descriptor.getPsiElement();
    if (expression instanceof PyStringLiteralExpression && expression.isWritable()) {
        PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project);
        String stringText = expression.getText();
        int prefixLength = PyStringLiteralExpressionImpl.getPrefixLength(stringText);
        String prefix = stringText.substring(0, prefixLength);
        String content = stringText.substring(prefixLength);
        if (content.startsWith("'''")) {
            content = content.substring(3, content.length() - 3);
        } else if (content.startsWith("\"\"\""))
            return;
        else {
            content = content.length() == 1 ? "" : content.substring(1, content.length() - 1);
        }
        if (content.endsWith("\""))
            content = StringUtil.replaceSubstring(content, TextRange.create(content.length() - 1, content.length()), "\\\"");
        PyExpression newString = elementGenerator.createDocstring(prefix + "\"\"\"" + content + "\"\"\"").getExpression();
        expression.replace(newString);
    }
}
Also used : PyStringLiteralExpression(com.jetbrains.python.psi.PyStringLiteralExpression) PyExpression(com.jetbrains.python.psi.PyExpression) PyElementGenerator(com.jetbrains.python.psi.PyElementGenerator) PsiElement(com.intellij.psi.PsiElement)

Aggregations

PyElementGenerator (com.jetbrains.python.psi.PyElementGenerator)26 PsiElement (com.intellij.psi.PsiElement)18 PyExpression (com.jetbrains.python.psi.PyExpression)9 PyBinaryExpression (com.jetbrains.python.psi.PyBinaryExpression)5 ASTNode (com.intellij.lang.ASTNode)4 PyStringLiteralExpression (com.jetbrains.python.psi.PyStringLiteralExpression)4 PyNumericLiteralExpression (com.jetbrains.python.psi.PyNumericLiteralExpression)3 Editor (com.intellij.openapi.editor.Editor)2 PsiWhiteSpace (com.intellij.psi.PsiWhiteSpace)2 LanguageLevel (com.jetbrains.python.psi.LanguageLevel)2 PyFunction (com.jetbrains.python.psi.PyFunction)2 TemplateBuilder (com.intellij.codeInsight.template.TemplateBuilder)1 WriteCommandAction (com.intellij.openapi.command.WriteCommandAction)1 Document (com.intellij.openapi.editor.Document)1 LogicalPosition (com.intellij.openapi.editor.LogicalPosition)1 FileEditor (com.intellij.openapi.fileEditor.FileEditor)1 OpenFileDescriptor (com.intellij.openapi.fileEditor.OpenFileDescriptor)1 TextEditor (com.intellij.openapi.fileEditor.TextEditor)1 VirtualFile (com.intellij.openapi.vfs.VirtualFile)1 PsiComment (com.intellij.psi.PsiComment)1