mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix for AST operations
This commit is contained in:
@@ -100,6 +100,7 @@ public class PythonParserDefinition implements ParserDefinition {
|
||||
}
|
||||
|
||||
public SpaceRequirements spaceExistanceTypeBetweenTokens(ASTNode left, ASTNode right) {
|
||||
if(left.getElementType() == PyTokenTypes.END_OF_LINE_COMMENT) return SpaceRequirements.MUST_LINE_BREAK;
|
||||
final Lexer lexer = createLexer(left.getPsi().getProject());
|
||||
return LanguageUtil.canStickTokensTogetherByLexer(left, right, lexer, 0);
|
||||
}
|
||||
|
||||
@@ -24,11 +24,11 @@ import com.intellij.psi.TokenType;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import com.jetbrains.python.PyElementTypes;
|
||||
import com.jetbrains.python.PyTokenTypes;
|
||||
import com.jetbrains.python.PythonLanguage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -191,7 +191,9 @@ public class PyBlock implements Block {
|
||||
IElementType parentType = _node.getElementType();
|
||||
IElementType type1 = childNode1.getElementType();
|
||||
IElementType type2 = childNode2.getElementType();
|
||||
|
||||
if (PyElementTypes.STATEMENTS.contains(type1) && PyElementTypes.STATEMENTS.contains(type2)){
|
||||
return Spacing.createSpacing(0, Integer.MAX_VALUE, 1, false, 1);
|
||||
}
|
||||
/*
|
||||
if (type1 == PyTokenTypes.COLON && type2 == PyElementTypes.STATEMENT_LIST) {
|
||||
return Spacing.createSpacing(0, Integer.MAX_VALUE, 1, true, Integer.MAX_VALUE);
|
||||
@@ -212,6 +214,7 @@ public class PyBlock implements Block {
|
||||
//return new PySpacingProcessor(getNode(), childNode1, childNode2,
|
||||
// _settings).getResult();
|
||||
//return Spacing.createSpacing(0, Integer.MAX_VALUE, 1, true, Integer.MAX_VALUE);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,24 +8,27 @@ import com.intellij.codeInsight.daemon.impl.ShowAutoImportPass;
|
||||
import com.intellij.codeInsight.hint.HintManager;
|
||||
import com.intellij.codeInsight.hint.QuestionAction;
|
||||
import com.intellij.codeInspection.HintAction;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.tree.Factory;
|
||||
import com.intellij.psi.impl.source.tree.LeafElement;
|
||||
import com.intellij.psi.PsiComment;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.search.FilenameIndex;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.jetbrains.python.PythonLanguage;
|
||||
import com.jetbrains.python.psi.PyImportStatement;
|
||||
import com.jetbrains.python.psi.PyReferenceExpression;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class AddImportAction implements HintAction, QuestionAction {
|
||||
private final PsiReference myReference;
|
||||
private Project myProject;
|
||||
private static final Logger LOG = Logger.getInstance("#" + AddImportAction.class.getName());
|
||||
|
||||
public AddImportAction(final PsiReference reference) {
|
||||
myReference = reference;
|
||||
@@ -62,20 +65,23 @@ public class AddImportAction implements HintAction, QuestionAction {
|
||||
final String referenceName = ((PyReferenceExpression)myReference).getReferencedName();
|
||||
final PsiFile[] files = FilenameIndex.getFilesByName(myProject, referenceName + ".py", GlobalSearchScope.allScope(myProject));
|
||||
if (files.length == 1) {
|
||||
String text = "\n";
|
||||
LeafElement ws = Factory.createSingleLeafElement(TokenType.WHITE_SPACE, text, 0, text.length(), null, file.getManager());
|
||||
final ASTNode importNodeToInsert = PythonLanguage.getInstance().getElementGenerator()
|
||||
.createImportStatementFromText(myProject, "import " + referenceName).getNode();
|
||||
final PsiElement element = getFirstNonComment(file);
|
||||
file.getNode().addChild(importNodeToInsert, element != null ? element.getNode() : file.getFirstChild().getNode());
|
||||
file.getNode().addChild(ws, importNodeToInsert);
|
||||
final PyImportStatement importNodeToInsert = PythonLanguage.getInstance().getElementGenerator().createImportStatementFromText(myProject, "import " + referenceName);
|
||||
try {
|
||||
file.addBefore(importNodeToInsert, getFirstNonComment(file));
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static PsiElement getFirstNonComment(final PsiFile file) {
|
||||
return PsiTreeUtil.skipSiblingsForward(file.getFirstChild(), PsiComment.class);
|
||||
final PsiElement firstChild = file.getFirstChild();
|
||||
LOG.assertTrue(firstChild != null);
|
||||
final PsiElement element = PsiTreeUtil.skipSiblingsForward(firstChild, PsiComment.class);
|
||||
return element != null ? element : firstChild;
|
||||
}
|
||||
|
||||
public boolean startInWriteAction() {
|
||||
|
||||
Reference in New Issue
Block a user