chore: Some code cleanup

This commit is contained in:
FalsePattern 2024-10-25 17:57:21 +02:00
parent 144883a86f
commit 0d915f921e
Signed by: falsepattern
GPG key ID: E930CDEC50C50E23
5 changed files with 25 additions and 33 deletions

View file

@ -1,6 +1,6 @@
package com.falsepattern.zigbrains.zig.psi; package com.falsepattern.zigbrains.zig.psi;
import com.falsepattern.zigbrains.zig.util.MultiLineUtil; import com.falsepattern.zigbrains.zig.util.PsiTextUtil;
import com.intellij.lang.Language; import com.intellij.lang.Language;
import com.intellij.lang.injection.MultiHostRegistrar; import com.intellij.lang.injection.MultiHostRegistrar;
import com.intellij.lang.injection.general.Injection; import com.intellij.lang.injection.general.Injection;
@ -12,7 +12,6 @@ import com.intellij.psi.PsiLanguageInjectionHost;
import lombok.val; import lombok.val;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class ZigLanguageInjectionPerformer implements LanguageInjectionPerformer { public class ZigLanguageInjectionPerformer implements LanguageInjectionPerformer {
@ -34,11 +33,11 @@ public class ZigLanguageInjectionPerformer implements LanguageInjectionPerformer
} else if (host instanceof PsiComment comment) { } else if (host instanceof PsiComment comment) {
val tt = comment.getTokenType(); val tt = comment.getTokenType();
if (tt == ZigTypes.LINE_COMMENT) { if (tt == ZigTypes.LINE_COMMENT) {
ranges = MultiLineUtil.getMultiLineContent(comment.getText(), "//"); ranges = PsiTextUtil.getMultiLineContent(comment.getText(), "//");
} else if (tt == ZigTypes.DOC_COMMENT) { } else if (tt == ZigTypes.DOC_COMMENT) {
ranges = MultiLineUtil.getMultiLineContent(comment.getText(), "///"); ranges = PsiTextUtil.getMultiLineContent(comment.getText(), "///");
} else if (tt == ZigTypes.CONTAINER_DOC_COMMENT) { } else if (tt == ZigTypes.CONTAINER_DOC_COMMENT) {
ranges = MultiLineUtil.getMultiLineContent(comment.getText(), "//!"); ranges = PsiTextUtil.getMultiLineContent(comment.getText(), "//!");
} else { } else {
return false; return false;
} }

View file

@ -1,7 +1,7 @@
package com.falsepattern.zigbrains.zig.psi; package com.falsepattern.zigbrains.zig.psi;
import com.falsepattern.zigbrains.zig.ZigFileType; import com.falsepattern.zigbrains.zig.ZigFileType;
import com.falsepattern.zigbrains.zig.util.PsiUtil; import com.falsepattern.zigbrains.zig.util.PsiTextUtil;
import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.AbstractElementManipulator; import com.intellij.psi.AbstractElementManipulator;
@ -12,21 +12,16 @@ import lombok.val;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.io.ByteArrayOutputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class ZigStringElementManipulator extends AbstractElementManipulator<ZigStringLiteral> { public class ZigStringElementManipulator extends AbstractElementManipulator<ZigStringLiteral> {
@Override @Override
public @Nullable ZigStringLiteral handleContentChange(@NotNull ZigStringLiteral element, @NotNull TextRange range, String newContent) public @Nullable ZigStringLiteral handleContentChange(@NotNull ZigStringLiteral element, @NotNull TextRange range, String newContent)
throws IncorrectOperationException { throws IncorrectOperationException {
assert (new TextRange(0, element.getTextLength())).contains(range); assert (new TextRange(0, element.getTextLength())).contains(range);
val originalContext = element.getText(); val originalContext = element.getText();
val isMulti = element.getStringLiteralMulti() != null; val isMulti = element.isMultiLine();
val elementRange = getRangeInElement(element); val elementRange = getRangeInElement(element);
var replacement = originalContext.substring(elementRange.getStartOffset(), var replacement = originalContext.substring(elementRange.getStartOffset(),
range.getStartOffset()) + range.getStartOffset()) +
@ -36,12 +31,7 @@ public class ZigStringElementManipulator extends AbstractElementManipulator<ZigS
val psiFileFactory = PsiFileFactory.getInstance(element.getProject()); val psiFileFactory = PsiFileFactory.getInstance(element.getProject());
if (isMulti) { if (isMulti) {
val column = StringUtil.offsetToLineColumn(element.getContainingFile().getText(), element.getTextOffset()).column; val column = StringUtil.offsetToLineColumn(element.getContainingFile().getText(), element.getTextOffset()).column;
val pfxB = new StringBuilder(column + 2); val pfx = " ".repeat(Math.max(0, column)) + "\\\\";
for (int i = 0; i < column; i++) {
pfxB.append(' ');
}
pfxB.append("\\\\");
val pfx = pfxB.toString();
replacement = Arrays.stream(replacement.split("(\\r\\n|\\r|\\n)")).map(line -> pfx + line).collect( replacement = Arrays.stream(replacement.split("(\\r\\n|\\r|\\n)")).map(line -> pfx + line).collect(
Collectors.joining("\n")); Collectors.joining("\n"));
} else { } else {
@ -55,10 +45,7 @@ public class ZigStringElementManipulator extends AbstractElementManipulator<ZigS
@Override @Override
public @NotNull TextRange getRangeInElement(@NotNull ZigStringLiteral element) { public @NotNull TextRange getRangeInElement(@NotNull ZigStringLiteral element) {
if (element.getStringLiteralSingle() != null) { return PsiTextUtil.getTextRangeBounds(element.getContentRanges());
return new TextRange(1, element.getTextLength() - 1);
}
return super.getRangeInElement(element);
} }
@SneakyThrows @SneakyThrows

View file

@ -1,8 +1,7 @@
package com.falsepattern.zigbrains.zig.psi.impl.mixins; package com.falsepattern.zigbrains.zig.psi.impl.mixins;
import com.falsepattern.zigbrains.zig.psi.ZigStringElementManipulator;
import com.falsepattern.zigbrains.zig.psi.ZigStringLiteral; import com.falsepattern.zigbrains.zig.psi.ZigStringLiteral;
import com.falsepattern.zigbrains.zig.util.MultiLineUtil; import com.falsepattern.zigbrains.zig.util.PsiTextUtil;
import com.intellij.extapi.psi.ASTWrapperPsiElement; import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode; import com.intellij.lang.ASTNode;
import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.Pair;
@ -36,7 +35,7 @@ public abstract class ZigStringLiteralMixinImpl extends ASTWrapperPsiElement imp
} }
@Override @Override
public List<Pair<TextRange, String>> getDecodeReplacements(@NotNull CharSequence input) { public @NotNull List<Pair<TextRange, String>> getDecodeReplacements(@NotNull CharSequence input) {
if (isMultiLine()) if (isMultiLine())
return List.of(); return List.of();
@ -54,11 +53,11 @@ public abstract class ZigStringLiteralMixinImpl extends ASTWrapperPsiElement imp
} }
@Override @Override
public List<TextRange> getContentRanges() { public @NotNull List<TextRange> getContentRanges() {
if (!isMultiLine()) { if (!isMultiLine()) {
return List.of(new TextRange(1, getTextLength() - 1)); return List.of(new TextRange(1, getTextLength() - 1));
} else { } else {
return MultiLineUtil.getMultiLineContent(getText(), "\\\\"); return PsiTextUtil.getMultiLineContent(getText(), "\\\\");
} }
} }
@ -112,8 +111,7 @@ public abstract class ZigStringLiteralMixinImpl extends ASTWrapperPsiElement imp
if (contentRanges == null) { if (contentRanges == null) {
contentRanges = myHost.getContentRanges(); contentRanges = myHost.getContentRanges();
} }
if (contentRanges.isEmpty()) return TextRange.EMPTY_RANGE; return PsiTextUtil.getTextRangeBounds(contentRanges);
return TextRange.create(contentRanges.getFirst().getStartOffset(), contentRanges.getLast().getEndOffset());
} }
@Override @Override

View file

@ -8,12 +8,13 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.LiteralTextEscaper; import com.intellij.psi.LiteralTextEscaper;
import com.intellij.psi.PsiLanguageInjectionHost; import com.intellij.psi.PsiLanguageInjectionHost;
import com.intellij.psi.impl.source.tree.LeafElement; import com.intellij.psi.impl.source.tree.LeafElement;
import lombok.val;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.List; import java.util.List;
public interface ZigStringLiteralMixin extends PsiLanguageInjectionHost { public interface ZigStringLiteralMixin extends PsiLanguageInjectionHost {
boolean isMultiLine(); boolean isMultiLine();
List<TextRange> getContentRanges(); @NotNull List<TextRange> getContentRanges();
List<Pair<TextRange, String>> getDecodeReplacements(@NotNull CharSequence input); @NotNull List<Pair<TextRange, String>> getDecodeReplacements(@NotNull CharSequence input);
} }

View file

@ -2,12 +2,19 @@ package com.falsepattern.zigbrains.zig.util;
import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.TextRange;
import lombok.val; import lombok.val;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class MultiLineUtil { public class PsiTextUtil {
public static List<TextRange> getMultiLineContent(String text, String startMark) { public static @NotNull TextRange getTextRangeBounds(@NotNull List<TextRange> contentRanges) {
if (contentRanges.isEmpty()) {
return TextRange.EMPTY_RANGE;
}
return TextRange.create(contentRanges.getFirst().getStartOffset(), contentRanges.getLast().getEndOffset());
}
public static @NotNull List<TextRange> getMultiLineContent(@NotNull String text, @NotNull String startMark) {
val result = new ArrayList<TextRange>(); val result = new ArrayList<TextRange>();
int stringStart = 0; int stringStart = 0;
boolean inBody = false; boolean inBody = false;