Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,42 +16,42 @@

package com.jetbrains.python.impl.buildout.config.psi.impl;

import com.google.common.collect.Lists;
import com.jetbrains.python.impl.buildout.config.psi.BuildoutPsiUtil;
import com.jetbrains.python.impl.buildout.config.ref.BuildoutPartReference;
import consulo.ide.impl.idea.openapi.util.text.StringUtil;
import consulo.language.ast.ASTNode;
import consulo.language.psi.PsiReference;
import consulo.util.lang.Pair;

import consulo.util.lang.StringUtil;
import jakarta.annotation.Nonnull;

import java.util.ArrayList;
import java.util.List;

/**
* @author traff
*/
public class BuildoutCfgValueLine extends BuildoutCfgPsiElement {
public BuildoutCfgValueLine(@Nonnull final ASTNode node) {
super(node);
}

@Override
public String toString() {
return "BuildoutCfgValue:" + getNode().getElementType().toString();
}
public BuildoutCfgValueLine(@Nonnull final ASTNode node) {
super(node);
}

@Nonnull
@Override
public PsiReference[] getReferences() {
if (BuildoutPsiUtil.isInBuildoutSection(this) && BuildoutPsiUtil.isAssignedTo(this, "parts")) {
List<BuildoutPartReference> refs = Lists.newArrayList();
List<Pair<String, Integer>> names = StringUtil.getWordsWithOffset(getText());
for (Pair<String, Integer> name : names) {
refs.add(new BuildoutPartReference(this, name.getFirst(), name.getSecond()));
}
return refs.toArray(new BuildoutPartReference[refs.size()]);
@Override
public String toString() {
return "BuildoutCfgValue:" + getNode().getElementType().toString();
}

return PsiReference.EMPTY_ARRAY;
}
@Nonnull
@Override
public PsiReference[] getReferences() {
if (BuildoutPsiUtil.isInBuildoutSection(this) && BuildoutPsiUtil.isAssignedTo(this, "parts")) {
List<BuildoutPartReference> refs = new ArrayList<>();
List<Pair<String, Integer>> names = StringUtil.getWordsWithOffset(getText());
for (Pair<String, Integer> name : names) {
refs.add(new BuildoutPartReference(this, name.getFirst(), name.getSecond()));
}
return refs.toArray(new BuildoutPartReference[refs.size()]);
}

return PsiReference.EMPTY_ARRAY;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ else if (myImportable instanceof PyClass) {
ContainerUtil.mapNotNull(((PyClass)myImportable).getSuperClasses(null), cls -> PyUtil.isObjectClass(cls) ? null : cls.getName());
if (!supers.isEmpty()) {
sb.append("(");
consulo.ide.impl.idea.openapi.util.text.StringUtil.join(supers, ", ", sb);
StringUtil.join(supers, ", ", sb);
sb.append(")");
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,23 @@
import com.jetbrains.python.psi.*;
import com.jetbrains.python.psi.types.PyType;
import com.jetbrains.python.psi.types.TypeEvalContext;
import consulo.annotation.access.RequiredWriteAction;
import consulo.codeEditor.Editor;
import consulo.ide.impl.idea.util.NotNullFunction;
import consulo.language.psi.PsiElement;
import consulo.language.psi.PsiFile;
import consulo.language.psi.util.PsiTreeUtil;
import consulo.language.util.IncorrectOperationException;
import consulo.project.Project;
import consulo.python.impl.localize.PyLocalize;
import consulo.util.lang.Couple;
import consulo.util.lang.Pair;
import consulo.util.lang.StringUtil;
import jakarta.annotation.Nonnull;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.function.Function;

/**
* @author Alexey.Ivanov
Expand Down Expand Up @@ -126,6 +128,8 @@ private static Collection<PyElementType> getOperators(@Nonnull PyBinaryExpressio
return res;
}

@Override
@RequiredWriteAction
public void doInvoke(@Nonnull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
PsiElement element =
PsiTreeUtil.getTopmostParentOfType(file.findElementAt(editor.getCaretModel().getOffset()), PyBinaryExpression.class);
Expand All @@ -136,18 +140,18 @@ public void doInvoke(@Nonnull Project project, Editor editor, PsiFile file) thro
final LanguageLevel languageLevel = LanguageLevel.forElement(element);
final boolean useFormatMethod = languageLevel.isAtLeast(LanguageLevel.PYTHON27);

NotNullFunction<String, String> escaper = consulo.ide.impl.idea.openapi.util.text.StringUtil.escaper(false, "\"\'\\");
Function<String, String> escaper = StringUtil.escaper(false, "\"\'\\");
StringBuilder stringLiteral = new StringBuilder();
List<String> parameters = new ArrayList<>();
Pair<String, String> quotes = Pair.create("\"", "\"");
Pair<String, String> quotes = Couple.of("\"", "\"");
boolean quotesDetected = false;
final TypeEvalContext context = TypeEvalContext.userInitiated(file.getProject(), file);
int paramCount = 0;
boolean isUnicode = false;
final PyClassTypeImpl unicodeType = PyBuiltinCache.getInstance(element).getObjectType("unicode");

for (PyExpression expression : getSimpleExpressions((PyBinaryExpression) element)) {
if (expression instanceof PyStringLiteralExpression) {
if (expression instanceof PyStringLiteralExpression stringLiteral1) {
final PyType type = context.getType(expression);
if (type != null && type.equals(unicodeType)) {
isUnicode = true;
Expand All @@ -156,7 +160,7 @@ public void doInvoke(@Nonnull Project project, Editor editor, PsiFile file) thro
quotes = PyStringLiteralUtil.getQuotes(expression.getText());
quotesDetected = true;
}
String value = ((PyStringLiteralExpression) expression).getStringValue();
String value = stringLiteral1.getStringValue();
if (!useFormatMethod) {
value = value.replace("%", "%%");
}
Expand All @@ -169,7 +173,7 @@ public void doInvoke(@Nonnull Project project, Editor editor, PsiFile file) thro
}
}
if (quotes == null) {
quotes = Pair.create("\"", "\"");
quotes = Couple.of("\"", "\"");
}
stringLiteral.insert(0, quotes.getFirst());
if (isUnicode && !quotes.getFirst().toLowerCase().contains("u")) {
Expand Down
Loading
Loading