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

View file

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

View file

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

View file

@ -8,12 +8,13 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.LiteralTextEscaper;
import com.intellij.psi.PsiLanguageInjectionHost;
import com.intellij.psi.impl.source.tree.LeafElement;
import lombok.val;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public interface ZigStringLiteralMixin extends PsiLanguageInjectionHost {
boolean isMultiLine();
List<TextRange> getContentRanges();
List<Pair<TextRange, String>> getDecodeReplacements(@NotNull CharSequence input);
@NotNull List<TextRange> getContentRanges();
@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 lombok.val;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class MultiLineUtil {
public static List<TextRange> getMultiLineContent(String text, String startMark) {
public class PsiTextUtil {
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>();
int stringStart = 0;
boolean inBody = false;