Class Trees
java.lang.Object
com.github._1c_syntax.bsl.languageserver.utils.Trees
-
Method Summary
Modifier and TypeMethodDescriptionstatic Collection<ParseTree>findAllRuleNodes(ParseTree t, int ruleIndex) Обертки Treesstatic Collection<ParserRuleContext>findAllRuleNodes(ParseTree t, Integer... index) Получает дочерние ноды с нужными типамиstatic Collection<ParserRuleContext>findAllRuleNodes(ParseTree t, Collection<Integer> indexes) Получает дочерние ноды с нужными типамиstatic Collection<ParseTree>findAllTokenNodes(ParseTree t, int ttype) static Collection<ParserRuleContext>findAllTopLevelDescendantNodes(ParserRuleContext root, Collection<Integer> indexes) Получает "первые" дочерние ноды с нужными типами ВАЖНО: поиск вглубь найденной ноды с нужными индексами не выполняется Например, если указать RULE_codeBlock, то найдется только самый верхнеуровневый блок кода, все вложенные найдены не будут ВАЖНО: начальная нода не проверяется на условие, т.к.static Optional<TerminalNode>findTerminalNodeContainsPosition(BSLParserRuleContext tree, Position position) Получение ноды в дереве по позиции в документе.static BSLParserRuleContextgetAncestorByRuleIndex(BSLParserRuleContext element, int type) Ищем предка элемента по указанному типу BSLParser Пример: BSLParserRuleContext parent = Trees.getAncestorByRuleIndex(ctx, BSLParser.RULE_statement);getChildren(Tree t) static List<BSLParserRuleContext>getChildren(Tree t, Integer... ruleIndex) Получает детей с нужными типамиgetComments(List<Token> tokens, Token token) Поиск комментариев назад от указанного токенаstatic Optional<BSLParserRuleContext>getFirstChild(Tree t, Integer... ruleIndex) Получает первого ребенка с одним из нужных типовstatic ParseTreegetNextNode(ParseTree parent, ParseTree tnc, int ruleindex) Выполняет поиск следующей ноды нужного типаstatic ParseTreegetPreviousNode(ParseTree parent, ParseTree tnc, int ruleindex) Выполняет поиск предыдущей ноды нужного типаgetPreviousTokenFromDefaultChannel(List<Token> tokens, int tokenIndex) getPreviousTokenFromDefaultChannel(List<Token> tokens, int tokenIndex, int tokenType) static BSLParserRuleContextРекурсивно находит самого верхнего родителя текущей нодыstatic BSLParserRuleContextgetRootParent(BSLParserRuleContext tnc, int ruleindex) Рекурсивно находит самого верхнего родителя текущей ноды нужного типаstatic BSLParserRuleContextgetRootParent(BSLParserRuleContext tnc, Collection<Integer> indexes) Рекурсивно находит самого верхнего родителя текущей ноды одного из нужных типовСписок токенов дерева разбора.getTrailingComment(List<Token> tokens, Token token) static booleannodeContains(ParseTree t, Integer... index) Проверяет наличие дочерней ноды с указанным типомstatic booleannodeContains(ParseTree t, ParseTree exclude, Integer... index) Проверяет наличие дочерней ноды с указанным типом исключая переданнуюstatic booleanПроверяет среди дочерних элементов узла наличие узла с ошибкойstatic booleanПроверяет среди всех дочерних элементов (рекурсивно) наличие узла с ошибкой
-
Method Details
-
findAllRuleNodes
Обертки Trees -
getChildren
-
getTokens
Список токенов дерева разбора.Токены формируются на основании всех потомков вида
TerminalNodeпереданного дерева.- Parameters:
tree- Дерево разбора- Returns:
- Список токенов
-
findAllTokenNodes
-
getDescendants
-
getAncestorByRuleIndex
@Nullable public static BSLParserRuleContext getAncestorByRuleIndex(BSLParserRuleContext element, int type) Ищем предка элемента по указанному типу BSLParser Пример: BSLParserRuleContext parent = Trees.getAncestorByRuleIndex(ctx, BSLParser.RULE_statement); -
treeContainsErrors
Проверяет среди всех дочерних элементов (рекурсивно) наличие узла с ошибкой- Returns:
- true - если есть узел с ошибкой
-
nodeContainsErrors
Проверяет среди дочерних элементов узла наличие узла с ошибкой- Returns:
- true - если есть узел с ошибкой
-
getPreviousNode
Выполняет поиск предыдущей ноды нужного типа- Parameters:
parent- - родительская нода, среди дочерних которой производится поискtnc- - нода, для которой ищем предыдущуюruleindex- - BSLParser.RULE_*- Returns:
- tnc - если предыдущая нода не найдена, вернет текущую
-
getPreviousTokenFromDefaultChannel
public static Optional<Token> getPreviousTokenFromDefaultChannel(List<Token> tokens, int tokenIndex, int tokenType) - Parameters:
tokens- - полный список токенов (см.DocumentContext.getTokens()tokenIndex- - индекс текущего токена в переданном списке токеновtokenType- - тип искомого токена (см.BSLParser- Returns:
- предыдущий токен, если он был найден
-
getPreviousTokenFromDefaultChannel
public static Optional<Token> getPreviousTokenFromDefaultChannel(List<Token> tokens, int tokenIndex) - Parameters:
tokens- - полный список токенов (см.DocumentContext.getTokens()tokenIndex- - индекс текущего токена в переданном списке токенов- Returns:
- предыдущий токен, если он был найден
-
getNextNode
Выполняет поиск следующей ноды нужного типа- Parameters:
parent- - родительская нода, среди дочерних которой производится поискtnc- - нода, для которой ищем следующуюruleindex- - BSLParser.RULE_*- Returns:
- tnc - если следующая нода не найдена, вернет текущую
-
getRootParent
Рекурсивно находит самого верхнего родителя текущей ноды -
getRootParent
Рекурсивно находит самого верхнего родителя текущей ноды нужного типа- Parameters:
tnc- - нода, для которой ищем родителяruleindex- - BSLParser.RULE_*- Returns:
- tnc - если родитель не найден, вернет null
-
getRootParent
@Nullable public static BSLParserRuleContext getRootParent(BSLParserRuleContext tnc, Collection<Integer> indexes) Рекурсивно находит самого верхнего родителя текущей ноды одного из нужных типов- Parameters:
tnc- - нода, для которой ищем родителяindexes- - Collection of BSLParser.RULE_*- Returns:
- tnc - если родитель не найден, вернет null
-
getChildren
Получает детей с нужными типами -
getFirstChild
Получает первого ребенка с одним из нужных типов- Parameters:
t- - нода, для которой ищем ребенкаruleIndex- - arrays of BSLParser.RULE_*- Returns:
- child - если первый ребенок не найден, вернет Optional
-
findAllRuleNodes
Получает дочерние ноды с нужными типами -
findAllRuleNodes
public static Collection<ParserRuleContext> findAllRuleNodes(ParseTree t, Collection<Integer> indexes) Получает дочерние ноды с нужными типами -
findAllTopLevelDescendantNodes
public static Collection<ParserRuleContext> findAllTopLevelDescendantNodes(ParserRuleContext root, Collection<Integer> indexes) Получает "первые" дочерние ноды с нужными типами ВАЖНО: поиск вглубь найденной ноды с нужными индексами не выполняется Например, если указать RULE_codeBlock, то найдется только самый верхнеуровневый блок кода, все вложенные найдены не будут ВАЖНО: начальная нода не проверяется на условие, т.к. тогда она единственная и вернется в результате- Parameters:
root- - начальный узел дереваindexes- - коллекция индексов- Returns:
- найденные узлы
-
nodeContains
Проверяет наличие дочерней ноды с указанным типом -
nodeContains
Проверяет наличие дочерней ноды с указанным типом исключая переданную -
findTerminalNodeContainsPosition
public static Optional<TerminalNode> findTerminalNodeContainsPosition(BSLParserRuleContext tree, Position position) Получение ноды в дереве по позиции в документе.- Parameters:
tree- - дерево, в котором ищемposition- - искомая позиция- Returns:
- терминальная нода на указанной позиции, если есть
-
getTrailingComment
- Parameters:
tokens- - список токенов из DocumentContexttoken- - токен, на строке которого требуется найти висячий комментарий- Returns:
- - токен с комментарием, если он найден
-
getComments
Поиск комментариев назад от указанного токена- Parameters:
tokens- - список токенов DocumentContexttoken- - токен, для которого требуется найти комментарии- Returns:
- - список найденных комментариев lines
-