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 BSLParserRuleContext
getAncestorByRuleIndex
(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 ParseTree
getNextNode
(ParseTree parent, ParseTree tnc, int ruleindex) Выполняет поиск следующей ноды нужного типаstatic ParseTree
getPreviousNode
(ParseTree parent, ParseTree tnc, int ruleindex) Выполняет поиск предыдущей ноды нужного типаgetPreviousTokenFromDefaultChannel
(List<Token> tokens, int tokenIndex) getPreviousTokenFromDefaultChannel
(List<Token> tokens, int tokenIndex, int tokenType) static BSLParserRuleContext
Рекурсивно находит самого верхнего родителя текущей нодыstatic BSLParserRuleContext
getRootParent
(BSLParserRuleContext tnc, int ruleindex) Рекурсивно находит самого верхнего родителя текущей ноды нужного типаstatic BSLParserRuleContext
getRootParent
(BSLParserRuleContext tnc, Collection<Integer> indexes) Рекурсивно находит самого верхнего родителя текущей ноды одного из нужных типовСписок токенов дерева разбора.getTrailingComment
(List<Token> tokens, Token token) static boolean
nodeContains
(ParseTree t, Integer... index) Проверяет наличие дочерней ноды с указанным типомstatic boolean
nodeContains
(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
-