package com.thoughtworks.gauge.autocomplete; import com.intellij.codeInsight.completion.PrefixMatcher; import org.jetbrains.annotations.NotNull; import java.util.regex.Matcher; import java.util.regex.Pattern; public class GaugePrefixMatcher extends PrefixMatcher { private Pattern regexPattern; protected GaugePrefixMatcher(String prefix) { super(prefix); regexPattern = Pattern.compile(toRegex(this.getPrefix()), Pattern.CASE_INSENSITIVE); } @Override public boolean prefixMatches(@NotNull String name) { Matcher matcher = regexPattern.matcher(name); return matcher.find(); } @NotNull @Override public PrefixMatcher cloneWithPrefix(@NotNull String prefix) { return new GaugePrefixMatcher(prefix); } private static String toRegex(String prefix) { Pattern pattern = Pattern.compile("[^a-z0-9]", Pattern.CASE_INSENSITIVE); String substring = ""; if (!prefix.isEmpty()) substring = String.valueOf(prefix.charAt(0)); Matcher matcher = pattern.matcher(substring); String escape = ""; if (matcher.matches()) escape = "\\"; return escape + prefix.replaceAll("\"[\\w ]+\"", "<[\\\\w ]*>"); } }