mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
keyword argument can be renamed
This commit is contained in:
@@ -77,6 +77,8 @@ public abstract class PyElementGenerator {
|
||||
|
||||
public abstract PyNamedParameter createParameter(@NotNull String name);
|
||||
|
||||
public abstract PyKeywordArgument createKeywordArgument(LanguageLevel languageLevel, String keyword, String value);
|
||||
|
||||
public abstract PsiFile createDummyFile(LanguageLevel langLevel, String contents);
|
||||
|
||||
public abstract PyExpressionStatement createDocstring(String content);
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.jetbrains.python.psi;
|
||||
|
||||
import com.intellij.psi.PsiNamedElement;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import com.intellij.lang.ASTNode;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public interface PyKeywordArgument extends PyExpression {
|
||||
public interface PyKeywordArgument extends PyExpression, PsiNamedElement {
|
||||
@Nullable
|
||||
String getKeyword();
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ public class PyControlFlowBuilder extends PyRecursiveElementVisitor {
|
||||
|
||||
@Override
|
||||
public void visitPyElement(PyElement node) {
|
||||
if (node instanceof PsiNamedElement) {
|
||||
if (node instanceof PsiNamedElement && !(node instanceof PyKeywordArgument)) {
|
||||
myBuilder.startNode(node);
|
||||
myBuilder.addNode(ReadWriteInstruction.newInstruction(myBuilder, node, node.getName(), ReadWriteInstruction.ACCESS.WRITE));
|
||||
}
|
||||
|
||||
@@ -47,6 +47,9 @@ public class PythonFindUsagesProvider implements FindUsagesProvider {
|
||||
}
|
||||
return "variable";
|
||||
}
|
||||
if (element instanceof PyKeywordArgument) {
|
||||
return "keyword argument";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
@@ -239,6 +239,12 @@ public class PyElementGeneratorImpl extends PyElementGenerator {
|
||||
return createFromText(LanguageLevel.getDefault(), PyNamedParameter.class, "def f(" + name + "): pass", PATH_PARAMETER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PyKeywordArgument createKeywordArgument(LanguageLevel languageLevel, String keyword, String value) {
|
||||
PyCallExpression callExpression = (PyCallExpression) createExpressionFromText(languageLevel, "foo(" + keyword + "=" + value + ")");
|
||||
return (PyKeywordArgument) callExpression.getArguments()[0];
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public <T> T createFromText(LanguageLevel langLevel, Class<T> aClass, final String text, final int[] path) {
|
||||
PsiElement ret = createDummyFile(langLevel, text);
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
package com.jetbrains.python.psi.impl;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.jetbrains.python.PyTokenTypes;
|
||||
import com.jetbrains.python.psi.LanguageLevel;
|
||||
import com.jetbrains.python.psi.PyElementGenerator;
|
||||
import com.jetbrains.python.psi.PyExpression;
|
||||
import com.jetbrains.python.psi.PyKeywordArgument;
|
||||
import com.jetbrains.python.psi.types.PyType;
|
||||
import com.jetbrains.python.psi.types.TypeEvalContext;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -53,4 +58,19 @@ public class PyKeywordArgumentImpl extends PyElementImpl implements PyKeywordArg
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return getKeyword();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
|
||||
PyElementGenerator generator = PyElementGenerator.getInstance(getProject());
|
||||
PyExpression expression = getValueExpression();
|
||||
PyKeywordArgument keywordArgument = generator.createKeywordArgument(LanguageLevel.forElement(this), name,
|
||||
expression != null ? expression.getText() : name);
|
||||
getNode().replaceChild(getKeywordNode(), keywordArgument.getKeywordNode());
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user