Fix -@mod and !@mod search syntax in Extended mode (#1071)

This commit is contained in:
slprime authored and GitHub committed 2026-10-10 14:58:17 +03:00
1 parent 1673079cbb
commit 550e85c456
2 files changed
+36 -1

No files matched your search

@@ -445,7 +445,7 @@ public class SearchTokenParser {
final char ch = input.charAt(index);
if (!insideQuotes && delimiters.indexOf(ch) >= 0
&& (!space || index == 0 || input.charAt(index - 1) == ' ')) {
&& (!space || index == 0 || input.charAt(index - 1) == ' ' || lastEnd == index)) {
if (lastEnd == index) {
token += String.valueOf(ch);
@@ -64,6 +64,7 @@ public class SearchTokenParserTest {
new ModeValue(1, "Extended mode"), new ModeValue(2, "Regex mode"), new ModeValue(3, "Extended+ mode") };
private static final ModeValue[] extendedPlusPatternMode = { patternModes[3] };
private static final ModeValue[] extendedPatternModes = { patternModes[1], patternModes[3] };
private static final ModeValue[] nonGrammarPatternModes = { patternModes[0], patternModes[1], patternModes[2] };
private static final SearchParserProvider defaultParserProvider = parserProvider(
'\0',
@@ -119,6 +120,10 @@ public class SearchTokenParserTest {
private static final List<Arguments> allModesTestProvider = combinationsProvider(spaceModes, patternModes);
private static final List<Arguments> nonGrammarAllSpaceModesTestProvider = combinationsProvider(
spaceModes,
nonGrammarPatternModes);
private static final List<Arguments> extendedPlusAllSpaceModesTestProvider = combinationsProvider(
spaceModes,
extendedPlusPatternMode);
@@ -236,6 +241,36 @@ public class SearchTokenParserTest {
assertTrue(matchedItems.contains(itemA));
}
@DisplayName("Negated prefix (dash)")
@ParameterizedTest(name = "{argumentsWithNames}")
@FieldSource("allModesTestProvider")
public void testNegatedPrefixDash(int spaceMode, int patternMode) {
SearchTokenParser searchParser = new SearchTokenParser();
searchParser.addProvider(defaultParserProvider);
searchParser
.addProvider(parserProvider('?', "custom", SearchTokenParser.SearchMode.PREFIX, customCreateFilter));
Set<ItemStack> matchedItems = testFilterAgainstAllItems(spaceMode, patternMode, searchParser, "-?A");
assertEquals(5, matchedItems.size());
assertFalse(matchedItems.contains(itemA));
}
@DisplayName("Negated prefix (bang)")
@ParameterizedTest(name = "{argumentsWithNames}")
@FieldSource("nonGrammarAllSpaceModesTestProvider")
public void testNegatedPrefixBang(int spaceMode, int patternMode) {
SearchTokenParser searchParser = new SearchTokenParser();
searchParser.addProvider(defaultParserProvider);
searchParser
.addProvider(parserProvider('?', "custom", SearchTokenParser.SearchMode.PREFIX, customCreateFilter));
Set<ItemStack> matchedItems = testFilterAgainstAllItems(spaceMode, patternMode, searchParser, "!?A");
assertEquals(5, matchedItems.size());
assertFalse(matchedItems.contains(itemA));
}
@DisplayName("Space mode")
@ParameterizedTest(name = "{argumentsWithNames}")
@FieldSource("spaceIsSpaceAllModesTestProvider")