Class FuzzyMatcher

java.lang.Object
com.github._1c_syntax.bsl.languageserver.utils.FuzzyMatcher

@Component public class FuzzyMatcher extends Object
Нечёткое (fuzzy) сопоставление имени с запросом: непрерывная подстрока в любом месте имени и разбросанная подпоследовательность, со скорингом качества совпадения.

Скор — целое, где меньшее значение релевантнее. Лестница совпадений: точное имя (SCORE_EXACT) → префикс полного имени (SCORE_PREFIX) → непрерывная подстрока в середине имени (SCORE_SUBSTRING) → подпоследовательность (SCORE_SUBSEQUENCE + позиция первого совпавшего символа: более раннее начало совпадения релевантнее). Несовпадение — NO_MATCH.

Метод fuzzyScore(String, String) (только подстрока/подпоследовательность) переиспользуется как «грязный» fuzzy-хвост поиска по символам воркспейса; score(String, String) добавляет сверху точное/префиксное совпадение и применяется в автодополнении.

  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    Совпадения нет.
    static final int
    Скор точного совпадения имени с запросом (наиболее релевантно).
    static final int
    Скор совпадения полного имени по префиксу запроса.
    static final int
    Базовый скор совпадения запроса как подпоследовательности имени; к нему прибавляется позиция первого совпавшего символа (более ранняя позиция — релевантнее).
    static final int
    Скор совпадения запроса как непрерывной подстроки имени (но не префикса имени).
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    fuzzyScore(String lowerName, String lowerQuery)
    Скор «не-префиксного» fuzzy-совпадения lowercase-имени с lowercase-запросом: непрерывная подстрока (SCORE_SUBSTRING) либо подпоследовательность (SCORE_SUBSEQUENCE + позиция первого совпавшего символа).
    boolean
    matches(String name, String lowerQuery)
    Совпадает ли имя с запросом хотя бы как подпоследовательность (любой уровень лестницы).
    int
    score(String name, String lowerQuery)
    Скор совпадения имени с запросом: точное / префиксное / подстрока / подпоследовательность.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • NO_MATCH

      public static final int NO_MATCH
      Совпадения нет.
      See Also:
    • SCORE_EXACT

      public static final int SCORE_EXACT
      Скор точного совпадения имени с запросом (наиболее релевантно).
      See Also:
    • SCORE_PREFIX

      public static final int SCORE_PREFIX
      Скор совпадения полного имени по префиксу запроса.
      See Also:
    • SCORE_SUBSTRING

      public static final int SCORE_SUBSTRING
      Скор совпадения запроса как непрерывной подстроки имени (но не префикса имени).
      See Also:
    • SCORE_SUBSEQUENCE

      public static final int SCORE_SUBSEQUENCE
      Базовый скор совпадения запроса как подпоследовательности имени; к нему прибавляется позиция первого совпавшего символа (более ранняя позиция — релевантнее).
      See Also:
  • Constructor Details

    • FuzzyMatcher

      public FuzzyMatcher()
  • Method Details

    • score

      public int score(String name, String lowerQuery)
      Скор совпадения имени с запросом: точное / префиксное / подстрока / подпоследовательность.

      Имя приводится к нижнему регистру внутри метода (Locale.ROOT); запрос должен быть передан уже в нижнем регистре и непустым.

      Parameters:
      name - имя-кандидат (в исходном регистре)
      lowerQuery - запрос в нижнем регистре, непустой
      Returns:
      скор >= SCORE_EXACT (меньше — релевантнее), либо NO_MATCH, если совпадения нет
    • matches

      public boolean matches(String name, String lowerQuery)
      Совпадает ли имя с запросом хотя бы как подпоследовательность (любой уровень лестницы).
      Parameters:
      name - имя-кандидат (в исходном регистре)
      lowerQuery - запрос в нижнем регистре, непустой
      Returns:
      true, если совпадение есть
    • fuzzyScore

      public int fuzzyScore(String lowerName, String lowerQuery)
      Скор «не-префиксного» fuzzy-совпадения lowercase-имени с lowercase-запросом: непрерывная подстрока (SCORE_SUBSTRING) либо подпоследовательность (SCORE_SUBSEQUENCE + позиция первого совпавшего символа).

      Оба аргумента должны быть уже в нижнем регистре (приведение — забота вызывающего, у которого lowercase-имя может быть предвычислено).

      Parameters:
      lowerName - lowercase-имя кандидата
      lowerQuery - lowercase-запрос, непустой
      Returns:
      скор >= SCORE_SUBSTRING, либо NO_MATCH, если совпадения нет