mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 22:51:17 +07:00
[angular] WEB-66165 "Rearrange tag attributes" does not work inside angular 17 control flow.
(cherry picked from commit faed76860dbfc008facd65afc6d44cc29efa342c) IJ-CR-175460 GitOrigin-RevId: c9851b9bdd27505d6bc59b00070ebc5860ebb11d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1f4fd0119f
commit
1ab2b433b9
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||||
package com.intellij.xml.arrangement;
|
package com.intellij.xml.arrangement;
|
||||||
|
|
||||||
import com.intellij.application.options.CodeStyle;
|
import com.intellij.application.options.CodeStyle;
|
||||||
@@ -7,7 +7,6 @@ import com.intellij.lang.xml.XMLLanguage;
|
|||||||
import com.intellij.openapi.editor.Document;
|
import com.intellij.openapi.editor.Document;
|
||||||
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.PsiElement;
|
|
||||||
import com.intellij.psi.codeStyle.arrangement.*;
|
import com.intellij.psi.codeStyle.arrangement.*;
|
||||||
import com.intellij.psi.codeStyle.arrangement.match.StdArrangementEntryMatcher;
|
import com.intellij.psi.codeStyle.arrangement.match.StdArrangementEntryMatcher;
|
||||||
import com.intellij.psi.codeStyle.arrangement.match.StdArrangementMatchRule;
|
import com.intellij.psi.codeStyle.arrangement.match.StdArrangementMatchRule;
|
||||||
@@ -52,25 +51,36 @@ public class HtmlRearranger extends XmlRearranger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<XmlElementArrangementEntry> parse(@NotNull PsiElement root,
|
protected @NotNull XmlArrangementVisitor createVisitor(
|
||||||
@Nullable Document document,
|
@NotNull XmlArrangementParseInfo info,
|
||||||
@NotNull Collection<? extends TextRange> ranges,
|
@Nullable Document document,
|
||||||
@NotNull ArrangementSettings settings) {
|
@NotNull Collection<? extends TextRange> ranges
|
||||||
final XmlArrangementParseInfo parseInfo = new XmlArrangementParseInfo();
|
) {
|
||||||
root.accept(new XmlArrangementVisitor(parseInfo, ranges) {
|
return new HtmlArrangementVisitor(info, document, ranges);
|
||||||
@Override
|
}
|
||||||
protected void postProcessTag(@NotNull XmlTag xmlTag, @NotNull XmlElementArrangementEntry xmlTagEntry) {
|
|
||||||
addEntriesForEmbeddedContent(xmlTag, xmlTagEntry, document, ranges);
|
protected static class HtmlArrangementVisitor extends XmlArrangementVisitor {
|
||||||
}
|
@Nullable private final Document myDocument;
|
||||||
});
|
|
||||||
return parseInfo.getEntries();
|
public HtmlArrangementVisitor(@NotNull XmlArrangementParseInfo info,
|
||||||
|
@Nullable Document document,
|
||||||
|
@NotNull Collection<? extends TextRange> ranges) {
|
||||||
|
super(info, ranges);
|
||||||
|
myDocument = document;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void postProcessTag(@NotNull XmlTag xmlTag, @NotNull XmlElementArrangementEntry xmlTagEntry) {
|
||||||
|
addEntriesForEmbeddedContent(xmlTag, xmlTagEntry, myDocument, myRanges);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addEntriesForEmbeddedContent(@NotNull XmlTag xmlTag,
|
private static void addEntriesForEmbeddedContent(@NotNull XmlTag xmlTag,
|
||||||
@NotNull XmlElementArrangementEntry xmlTagEntry,
|
@NotNull XmlElementArrangementEntry xmlTagEntry,
|
||||||
@Nullable Document document,
|
@Nullable Document document,
|
||||||
@NotNull Collection<? extends TextRange> ranges) {
|
@NotNull Collection<? extends TextRange> ranges) {
|
||||||
if (!StringUtil.equals(xmlTag.getName(), BasicHtmlUtil.SCRIPT_TAG_NAME) && !StringUtil.equals(xmlTag.getName(), BasicHtmlUtil.STYLE_TAG_NAME)) {
|
if (!StringUtil.equals(xmlTag.getName(), BasicHtmlUtil.SCRIPT_TAG_NAME) &&
|
||||||
|
!StringUtil.equals(xmlTag.getName(), BasicHtmlUtil.STYLE_TAG_NAME)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (XmlTagChild child : xmlTag.getValue().getChildren()) {
|
for (XmlTagChild child : xmlTag.getValue().getChildren()) {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public class XmlArrangementVisitor extends XmlElementVisitor {
|
|||||||
private final Stack<XmlElementArrangementEntry> myStack = new Stack<>();
|
private final Stack<XmlElementArrangementEntry> myStack = new Stack<>();
|
||||||
|
|
||||||
private final XmlArrangementParseInfo myInfo;
|
private final XmlArrangementParseInfo myInfo;
|
||||||
private final Collection<? extends TextRange> myRanges;
|
protected final Collection<? extends TextRange> myRanges;
|
||||||
|
|
||||||
public XmlArrangementVisitor(@NotNull XmlArrangementParseInfo info, @NotNull Collection<? extends TextRange> ranges) {
|
public XmlArrangementVisitor(@NotNull XmlArrangementParseInfo info, @NotNull Collection<? extends TextRange> ranges) {
|
||||||
myInfo = info;
|
myInfo = info;
|
||||||
@@ -122,6 +122,6 @@ public class XmlArrangementVisitor extends XmlElementVisitor {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||||
package com.intellij.xml.arrangement;
|
package com.intellij.xml.arrangement;
|
||||||
|
|
||||||
import com.intellij.openapi.editor.Document;
|
import com.intellij.openapi.editor.Document;
|
||||||
@@ -42,7 +42,8 @@ public class XmlRearranger
|
|||||||
Collections.emptyList(), DEFAULT_MATCH_RULES);
|
Collections.emptyList(), DEFAULT_MATCH_RULES);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final DefaultArrangementSettingsSerializer SETTINGS_SERIALIZER = new DefaultArrangementSettingsSerializer(DEFAULT_SETTINGS);
|
private static final DefaultArrangementSettingsSerializer SETTINGS_SERIALIZER =
|
||||||
|
new DefaultArrangementSettingsSerializer(DEFAULT_SETTINGS);
|
||||||
|
|
||||||
public static @NotNull StdArrangementMatchRule attrArrangementRule(@NotNull String nameFilter,
|
public static @NotNull StdArrangementMatchRule attrArrangementRule(@NotNull String nameFilter,
|
||||||
@NotNull String namespaceFilter,
|
@NotNull String namespaceFilter,
|
||||||
@@ -66,10 +67,10 @@ public class XmlRearranger
|
|||||||
@Override
|
@Override
|
||||||
public boolean isEnabled(@NotNull ArrangementSettingsToken token, @Nullable ArrangementMatchCondition current) {
|
public boolean isEnabled(@NotNull ArrangementSettingsToken token, @Nullable ArrangementMatchCondition current) {
|
||||||
return SUPPORTED_TYPES.contains(token)
|
return SUPPORTED_TYPES.contains(token)
|
||||||
|| StdArrangementTokens.Regexp.NAME.equals(token)
|
|| StdArrangementTokens.Regexp.NAME.equals(token)
|
||||||
|| StdArrangementTokens.Regexp.XML_NAMESPACE.equals(token)
|
|| StdArrangementTokens.Regexp.XML_NAMESPACE.equals(token)
|
||||||
|| KEEP.equals(token)
|
|| KEEP.equals(token)
|
||||||
|| BY_NAME.equals(token);
|
|| BY_NAME.equals(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -82,17 +83,16 @@ public class XmlRearranger
|
|||||||
@Nullable Document document,
|
@Nullable Document document,
|
||||||
@NotNull Collection<? extends TextRange> ranges,
|
@NotNull Collection<? extends TextRange> ranges,
|
||||||
@NotNull PsiElement element,
|
@NotNull PsiElement element,
|
||||||
@NotNull ArrangementSettings settings)
|
@NotNull ArrangementSettings settings) {
|
||||||
{
|
|
||||||
final XmlArrangementParseInfo newEntryInfo = new XmlArrangementParseInfo();
|
final XmlArrangementParseInfo newEntryInfo = new XmlArrangementParseInfo();
|
||||||
element.accept(new XmlArrangementVisitor(newEntryInfo, Collections.singleton(element.getTextRange())));
|
element.accept(createVisitor(newEntryInfo, document, Collections.singleton(element.getTextRange())));
|
||||||
|
|
||||||
if (newEntryInfo.getEntries().size() != 1) {
|
if (newEntryInfo.getEntries().size() != 1) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
final XmlElementArrangementEntry entry = newEntryInfo.getEntries().get(0);
|
final XmlElementArrangementEntry entry = newEntryInfo.getEntries().get(0);
|
||||||
final XmlArrangementParseInfo existingEntriesInfo = new XmlArrangementParseInfo();
|
final XmlArrangementParseInfo existingEntriesInfo = new XmlArrangementParseInfo();
|
||||||
root.accept(new XmlArrangementVisitor(existingEntriesInfo, ranges));
|
root.accept(createVisitor(existingEntriesInfo, document, ranges));
|
||||||
return Pair.create(entry, existingEntriesInfo.getEntries());
|
return Pair.create(entry, existingEntriesInfo.getEntries());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ public class XmlRearranger
|
|||||||
@NotNull Collection<? extends TextRange> ranges,
|
@NotNull Collection<? extends TextRange> ranges,
|
||||||
@NotNull ArrangementSettings settings) {
|
@NotNull ArrangementSettings settings) {
|
||||||
final XmlArrangementParseInfo parseInfo = new XmlArrangementParseInfo();
|
final XmlArrangementParseInfo parseInfo = new XmlArrangementParseInfo();
|
||||||
root.accept(new XmlArrangementVisitor(parseInfo, ranges));
|
root.accept(createVisitor(parseInfo, document, ranges));
|
||||||
return parseInfo.getEntries();
|
return parseInfo.getEntries();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,4 +133,12 @@ public class XmlRearranger
|
|||||||
public @NotNull ArrangementEntryMatcher buildMatcher(@NotNull ArrangementMatchCondition condition) throws IllegalArgumentException {
|
public @NotNull ArrangementEntryMatcher buildMatcher(@NotNull ArrangementMatchCondition condition) throws IllegalArgumentException {
|
||||||
throw new IllegalArgumentException("Can't build a matcher for condition " + condition);
|
throw new IllegalArgumentException("Can't build a matcher for condition " + condition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected @NotNull XmlArrangementVisitor createVisitor(
|
||||||
|
@NotNull XmlArrangementParseInfo info,
|
||||||
|
@Nullable Document document,
|
||||||
|
@NotNull Collection<? extends TextRange> ranges
|
||||||
|
) {
|
||||||
|
return new XmlArrangementVisitor(info, ranges);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user