From 23b9fcbd68f63491ce3c2c4a88a7f48b0c42571a Mon Sep 17 00:00:00 2001 From: Piotr Semenov Date: Sun, 19 May 2024 22:47:38 +0400 Subject: [PATCH] fix: remove nested repositories/patterns, make look-behinds to be fixed-width, closes #3 --- src/comments.YAML-tmLanguage | 21 ++-- src/functions.YAML-tmLanguage.j2 | 202 ++++++++++++++++--------------- src/literals.YAML-tmLanguage | 43 ++++--- src/operators.YAML-tmLanguage | 3 - 4 files changed, 136 insertions(+), 133 deletions(-) diff --git a/src/comments.YAML-tmLanguage b/src/comments.YAML-tmLanguage index 81633c8..8f25dd1 100644 --- a/src/comments.YAML-tmLanguage +++ b/src/comments.YAML-tmLanguage @@ -2,7 +2,7 @@ repository: comments: patterns: - - include: '#inline' + - include: '#_inline' - begin: '/\*' beginCaptures: @@ -15,13 +15,12 @@ repository: name: comment.block.parigp patterns: - include: '#comments' - repository: - inline: - patterns: - - - match: '(\\\\).*$\n?' - captures: - 0: - name: punctuation.definition.comment.parigp - 1: - name: comment.line.double-slash.parigp + _inline: + patterns: + - + match: '(\\\\).*$\n?' + captures: + 0: + name: punctuation.definition.comment.parigp + 1: + name: comment.line.double-slash.parigp diff --git a/src/functions.YAML-tmLanguage.j2 b/src/functions.YAML-tmLanguage.j2 index fb6bec0..242e5f1 100644 --- a/src/functions.YAML-tmLanguage.j2 +++ b/src/functions.YAML-tmLanguage.j2 @@ -4,104 +4,112 @@ repository: parens: &parens_rules [] functions: patterns: - - include: '#builtins' - - include: '#user-defined' + - include: '#_builtins' + - include: '#_user-defined' - repository: - builtins: + _builtins: + patterns: + - + match: '\b({{ scopes["entity.name.function"] | join("|") }})\b(\s*)(?={|\()' + captures: + 1: + name: entity.name.function.builtins.parigp + 2: + name: constant.character.whitespace.parigp + - + match: '\b({{ scopes["constant.language"] | join("|") }})' + captures: + 1: + name: constant.language.parigp + - + match: '\b({{ scopes["keyword.control"] | join("|") }})\b' + captures: + 1: + name: keyword.control.parigp + - + match: '(\.)({{ scopes["entity.name.function.member"] | join("|") }})\b' + captures: + 1: + name: markup.punctuation.member.parigp + 2: + name: entity.name.function.member.builtins.parigp + + _user-defined: + patterns: + - + begin: '([[:alpha:]][[:alnum:]_]*)\b(?=(\s*\(|\(\s*\{|\{\s*\()[^=]*=)' + end: '(?<=\=)' + beginCaptures: + 1: + name: entity.name.function.user.parigp + name: meta.function.parigp + patterns: + - include: '#_function-vars' + - + begin: '([[:alpha:]][[:alnum:]_]*)\b(?=\s*=\s*(\(([^()]|(\g<2>))*\)|[[:alpha:]][[:alnum:]_]*)\s*\-\s*>)' + end: '\-(\s*)>' + beginCaptures: + 1: + name: entity.name.function.user.lambda.parigp + endCaptures: + 0: + name: keyword.operator.lambda + 1: + name: constant.character.whitespace.parigp + name: meta.function.lambda.parigp patterns: - - - match: '\b({{ scopes["entity.name.function"] | join("|") }})\b(\s*)(?={|\()' - captures: - 1: - name: entity.name.function.builtins.parigp - 2: - name: constant.character.whitespace.parigp - - - match: '\b({{ scopes["constant.language"] | join("|") }})' - captures: - 1: - name: constant.language.parigp - - - match: '\b({{ scopes["keyword.control"] | join("|") }})\b' - captures: - 1: - name: keyword.control.parigp - - - match: '(\.)({{ scopes["entity.name.function.member"] | join("|") }})\b' - captures: - 1: - name: markup.punctuation.member.parigp - 2: - name: entity.name.function.member.builtins.parigp + - include: '#_function-vars' + - + begin: '(?=(?:\(([^()]|(\g<0>))*\)|[[:alpha:]][[:alnum:]_]*|\{.+\})\s*\-\s*>)' + end: '\-(\s*)>' + contentName: entity.name.function.user.lambda.anonymous.parigp + endCaptures: + 0: + name: keyword.operator.lambda + 1: + name: constant.character.whitespace.parigp + name: meta.function.lambda.anonymous.parigp + patterns: + - include: '#_function-vars' + - + begin: '(\.)([[:alpha:]][[:alnum:]_]*)\b(?=[^=]*=)' + end: '(?<=\=)' + beginCaptures: + 1: + name: markup.punctuation.member.parigp + 2: + name: entity.name.function.user.member.parigp + name: meta.function.member.parigp + patterns: + - include: '#general' + - include: '#operators' - user-defined: + _function-vars: + patterns: + - + <<: *parens_rules + patterns: + - include: '#_function-vars' + - include: '#general' + - include: '#literals' + - include: '#operators' + - include: '#type-hints' + - + match: '(?))*\)|[[:alpha:]][[:alnum:]_]*)\s*\-\s*>)' - end: '(?<=\s*\-\s*>)' - beginCaptures: - 1: - name: entity.name.function.user.lambda.parigp - name: meta.function.lambda.parigp - patterns: - - include: '#function-vars' - - - begin: '(\(([^()]|(\g<0>))*\)|[[:alpha:]][[:alnum:]_]*|\{.+\})(?=\s*\-\s*>)' - end: '(?<=\s*\-\s*>)' - beginCaptures: - 1: - name: entity.name.function.user.lambda.anonymous.parigp - patterns: - - include: '#function-vars' - name: meta.function.lambda.anonymous.parigp - patterns: - - include: '#general' - - include: '#operators' - - - begin: '(\.)([[:alpha:]][[:alnum:]_]*)\b(?=[^=]*=)' - end: '(?<=\s*\=)' - beginCaptures: - 1: - name: markup.punctuation.member.parigp - 2: - name: entity.name.function.user.member.parigp - name: meta.function.member.parigp - patterns: - - include: '#general' - - include: '#operators' - repository: - function-vars: - patterns: - - - <<: *parens_rules - patterns: - - include: '#function-vars' - - include: '#general' - - include: '#literals' - - include: '#operators' - - include: '#type-hints' - - - match: '(?=|<|(?|!=|==)' name: keyword.operator.comparison.parigp - - - match: '(\->)' - name: keyword.operator.lambda - match: '(=)' name: keyword.operator.assignment.parigp