Skip to content

Commit

Permalink
Adopt linkedEditingRanges wordPattern property #1187
Browse files Browse the repository at this point in the history
Signed-off-by: Victor Rubezhny <vrubezhny@redhat.com>
  • Loading branch information
vrubezhny authored and mickaelistria committed Mar 31, 2022
1 parent d175a3c commit 6113791
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 22 deletions.
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2021 Red Hat Inc. and others.
* Copyright (c) 2021, 2022 Red Hat Inc. and others.
* All rights reserved. This program and the accompanying materials
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
Expand Down Expand Up @@ -34,6 +34,16 @@ class XMLLinkedEditing {

private static Logger LOGGER = Logger.getLogger(XMLLinkedEditing.class.getName());

// Full XML Element name pattern
public static final String XML_ELEMENT_WORD_PATTERN =
"[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6" //$NON-NLS-1$
+ "\\u00F8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f" //$NON-NLS-1$
+ "\\u2c00-\\u2fef\\u3001-\\udfff\\uf900-\\ufdcf\\ufdf0-\\ufffd\\u10000-\\uEFFFF]" //$NON-NLS-1$
+ "[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6" //$NON-NLS-1$
+ "\\u00F8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f" //$NON-NLS-1$
+ "\\u2c00-\\u2fef\\u3001-\\udfff\\uf900-\\ufdcf\\ufdf0-\\ufffd\\u10000-\\uEFFFF\\-\\.0-9" //$NON-NLS-1$
+ "\\u00b7\\u0300-\\u036f\\u203f-\\u2040]*"; //$NON-NLS-1$

/**
* Returns the linked editing ranges for the given <code>xmlDocument</code> at
* the given <code>position</code> and null otherwise.
Expand All @@ -60,7 +70,7 @@ public LinkedEditingRanges findLinkedEditingRanges(DOMDocument document, Positio
if (element.isInStartTag(offset) || element.isInEndTag(offset, true)) {
List<Range> ranges = Arrays.asList(XMLPositionUtility.selectStartTagName(element),
XMLPositionUtility.selectEndTagName(element));
return new LinkedEditingRanges(ranges);
return new LinkedEditingRanges(ranges, XML_ELEMENT_WORD_PATTERN);
}
} catch (BadLocationException e) {
LOGGER.log(Level.SEVERE, "In XMLLinkedEditing, position error", e);
Expand Down
Expand Up @@ -268,13 +268,6 @@ public static void assertCompletion(CompletionList completions, CompletionItem e
if (expected.getDocumentation() != null) {
assertEquals(expected.getDocumentation(), match.getDocumentation());
}

if (expected.getAdditionalTextEdits() != null && match.getAdditionalTextEdits() != null) {
assertEquals(expected.getAdditionalTextEdits().size(), match.getAdditionalTextEdits().size());
for (TextEdit expectedATE : expected.getAdditionalTextEdits()) {
assertAdditionalTextEdit(match.getAdditionalTextEdits(), expectedATE);
}
}
}

public static void assertAdditionalTextEdit(List<TextEdit> matches, TextEdit expected) {
Expand Down Expand Up @@ -1431,6 +1424,10 @@ public static LinkedEditingRanges le(Range... ranges) {
return new LinkedEditingRanges(Arrays.asList(ranges));
}

public static LinkedEditingRanges le(String wordPattern, Range... ranges) {
return new LinkedEditingRanges(Arrays.asList(ranges), wordPattern);
}

// ------------------- Generator assert

public static void assertGrammarGenerator(String xml, FileContentGeneratorSettings grammarSettings,
Expand Down
Expand Up @@ -14,7 +14,7 @@
import static org.eclipse.lemminx.XMLAssert.le;
import static org.eclipse.lemminx.XMLAssert.r;
import static org.eclipse.lemminx.XMLAssert.testLinkedEditingFor;

import static org.eclipse.lemminx.services.XMLLinkedEditing.XML_ELEMENT_WORD_PATTERN;
import org.eclipse.lemminx.commons.BadLocationException;
import org.junit.jupiter.api.Test;

Expand All @@ -36,24 +36,24 @@ public void linkedEditingWithOrpheanEndTag() throws BadLocationException {
@Test
public void linkedEditing() throws BadLocationException {
testLinkedEditingFor("|<div></div>", null);
testLinkedEditingFor("<|div></div>", le(r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<d|iv></div>", le(r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<di|v></div>", le(r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<div|></div>", le(r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<|div></div>", le(XML_ELEMENT_WORD_PATTERN,r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<d|iv></div>", le(XML_ELEMENT_WORD_PATTERN,r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<di|v></div>", le(XML_ELEMENT_WORD_PATTERN,r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<div|></div>", le(XML_ELEMENT_WORD_PATTERN,r(0, 1, 0, 4), r(0, 7, 0, 10)));

testLinkedEditingFor("<div>|</div>", null);
testLinkedEditingFor("<div><|/div>", null);

testLinkedEditingFor("<div></|div>", le(r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<div></d|iv>", le(r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<div></di|v>", le(r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<div></div|>", le(r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<div></|div>", le(XML_ELEMENT_WORD_PATTERN,r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<div></d|iv>", le(XML_ELEMENT_WORD_PATTERN,r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<div></di|v>", le(XML_ELEMENT_WORD_PATTERN,r(0, 1, 0, 4), r(0, 7, 0, 10)));
testLinkedEditingFor("<div></div|>", le(XML_ELEMENT_WORD_PATTERN,r(0, 1, 0, 4), r(0, 7, 0, 10)));

testLinkedEditingFor("<div></div>|", null);
testLinkedEditingFor("<div><div|</div>", le(r(0, 6, 0, 9), r(0, 11, 0, 14)));
testLinkedEditingFor("<div><div><div|</div></div>", le(r(0, 11, 0, 14), r(0, 16, 0, 19)));
testLinkedEditingFor("<div><div|</div>", le(XML_ELEMENT_WORD_PATTERN,r(0, 6, 0, 9), r(0, 11, 0, 14)));
testLinkedEditingFor("<div><div><div|</div></div>", le(XML_ELEMENT_WORD_PATTERN,r(0, 11, 0, 14), r(0, 16, 0, 19)));

testLinkedEditingFor("<div| ></div>", le(r(0, 1, 0, 4), r(0, 8, 0, 11)));
testLinkedEditingFor("<div| id='foo'></div>", le(r(0, 1, 0, 4), r(0, 16, 0, 19)));
testLinkedEditingFor("<div| ></div>", le(XML_ELEMENT_WORD_PATTERN,r(0, 1, 0, 4), r(0, 8, 0, 11)));
testLinkedEditingFor("<div| id='foo'></div>", le(XML_ELEMENT_WORD_PATTERN,r(0, 1, 0, 4), r(0, 16, 0, 19)));
}
}

0 comments on commit 6113791

Please sign in to comment.