chore: Some code cleanup
This commit is contained in:
parent
144883a86f
commit
0d915f921e
5 changed files with 25 additions and 33 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
Loading…
Add table
Reference in a new issue