Class AbstractPlatformMemberSemanticTokensSupplier<T extends ParserRuleContext>
java.lang.Object
com.github._1c_syntax.bsl.languageserver.semantictokens.AbstractPlatformMemberSemanticTokensSupplier<T>
- Type Parameters:
T- тип AST-узла обращения к члену
- All Implemented Interfaces:
SemanticTokensSupplier
- Direct Known Subclasses:
PlatformMemberMethodCallSemanticTokensSupplier, PlatformMemberPropertyAccessSemanticTokensSupplier
public abstract class AbstractPlatformMemberSemanticTokensSupplier<T extends ParserRuleContext>
extends Object
implements SemanticTokensSupplier
Общая основа сапплаеров, подсвечивающих обращения к членам платформенных типов
(свойство через accessProperty, вызов метода через accessCall). Тип члена
резолвится через
TypeService.memberAt(DocumentContext, Position) — дорогой инференс, поэтому в
range-запросе он вызывается только для узлов, пересекающихся с запрошенным
диапазоном.
Подклассы определяют четыре точки расширения:
ruleIndex()— какой rule-узел AST обходить;nameRange(ParserRuleContext)— диапазон имени члена в узле;skipFilter(DocumentContext)— узлы, которые красит другой сапплаер (домен GlobalScope, source-defined вызовы) и которые нужно пропустить, чтобы не дублировать токен;emit(List, DocumentContext, Range)— резолв члена и выдача токена нужного типа/модификаторов.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final String[]protected final SemanticTokensHelperprotected final TypeService -
Constructor Summary
ConstructorsConstructorDescriptionAbstractPlatformMemberSemanticTokensSupplier(TypeService typeService, SemanticTokensHelper helper) -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract voidemit(List<SemanticTokenEntry> entries, DocumentContext documentContext, Range range) Резолвит член в позиции и при успехе добавляет токен вentries.final List<SemanticTokenEntry> getSemanticTokens(DocumentContext documentContext) Получить семантические токены для документа.final List<SemanticTokenEntry> getSemanticTokens(DocumentContext documentContext, Range range) Получить семантические токены только для указанного диапазона документа (запросtextDocument/semanticTokens/range).Диапазон имени члена в узле; empty, если имени нет.protected abstract intИндекс rule-узла AST для обхода (напримерBSLParser.RULE_accessProperty).protected abstract BiPredicate<T, Range> skipFilter(DocumentContext documentContext) Предикат «пропустить узел» — позиции, которые уже красит другой сапплаер.
-
Field Details
-
DEFAULT_LIBRARY_MODIFIERS
-
typeService
-
helper
-
-
Constructor Details
-
AbstractPlatformMemberSemanticTokensSupplier
@ConstructorProperties({"typeService","helper"}) public AbstractPlatformMemberSemanticTokensSupplier(TypeService typeService, SemanticTokensHelper helper)
-
-
Method Details
-
ruleIndex
protected abstract int ruleIndex()Индекс rule-узла AST для обхода (напримерBSLParser.RULE_accessProperty). -
nameRange
-
skipFilter
Предикат «пропустить узел» — позиции, которые уже красит другой сапплаер. Считается один раз на документ (можно предвычислить тяжёлое состояние). -
emit
protected abstract void emit(List<SemanticTokenEntry> entries, DocumentContext documentContext, Range range) Резолвит член в позиции и при успехе добавляет токен вentries. -
getSemanticTokens
Description copied from interface:SemanticTokensSupplierПолучить семантические токены для документа.- Specified by:
getSemanticTokensin interfaceSemanticTokensSupplier- Parameters:
documentContext- Контекст документа- Returns:
- Список семантических токенов
-
getSemanticTokens
public final List<SemanticTokenEntry> getSemanticTokens(DocumentContext documentContext, Range range) Description copied from interface:SemanticTokensSupplierПолучить семантические токены только для указанного диапазона документа (запросtextDocument/semanticTokens/range).Реализация по умолчанию игнорирует диапазон и возвращает токены всего документа — провайдер всё равно отфильтрует их по диапазону. Дорогие сапплаеры (с инференсом типов на каждый узел) переопределяют этот метод, чтобы не выполнять тяжёлую работу за пределами видимой области.
- Specified by:
getSemanticTokensin interfaceSemanticTokensSupplier- Parameters:
documentContext- Контекст документаrange- Запрошенный диапазон (всегда задан вызывающим)- Returns:
- Список семантических токенов в пределах диапазона
-