From f34fd8887f3cbf1d888c33a9c019093b49366473 Mon Sep 17 00:00:00 2001 From: Elior Boukhobza Date: Sat, 8 Jun 2024 18:29:15 +0300 Subject: [PATCH 1/3] Improve Permify Language Improve Permify language by implementing latest language features. Screenshots (in IntelliJ IDEA): --- syntaxes/perm.tmLanguage.json | 292 ++++++++++++++++++++++++++++------ 1 file changed, 241 insertions(+), 51 deletions(-) diff --git a/syntaxes/perm.tmLanguage.json b/syntaxes/perm.tmLanguage.json index 97b28a0..cdabdfb 100644 --- a/syntaxes/perm.tmLanguage.json +++ b/syntaxes/perm.tmLanguage.json @@ -1,52 +1,242 @@ { - "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", - "name": "Perm Authorization Language", - "patterns": [{ - "include": "#keywords" - }, { - "include": "#strings" - }, { - "include": "#constants" - }, { - "include": "#relation.types" - }, { - "include": "#comments" - }], - "repository": { - "keywords": { - "patterns": [{ - "name": "keyword.control.perm", - "match": "\\b(entity|relation|permission|return|and|or|not)\\b" - }] - }, - "strings": { - "name": "string.quoted.double.perm", - "begin": "\"", - "end": "\"", - "patterns": [{ - "name": "constant.character.escape.perm", - "match": "\\\\." - }] - }, - "comments": { - "patterns": [{ - "name": "comment.line", - "begin": "//", - "end": "\n" - }] - }, - "constants": { - "patterns": [{ - "name": "constant.character", - "match": "=" - }] - }, - "relation.types": { - "patterns": [{ - "name": "entity.name.type", - "match": "\\B@\\w+#?\\w+" - }] - } - }, - "scopeName": "source.perm" -} \ No newline at end of file + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "Perm Authorization Language", + "fileTypes": [ + "perm", + "permify" + ], + "patterns": [ + { + "include": "#keywords" + }, + { + "include": "#entities" + }, + { + "include": "#strings" + }, + { + "include": "#numbers" + }, + { + "include": "#operators" + }, + { + "include": "#relations" + }, + { + "include": "#variables" + }, + { + "include": "#comments" + }, + { + "include": "#types" + } + ], + "repository": { + "comments": { + "patterns": [ + { + "begin": "//", + "end": "\\n", + "name": "comment.line.perm" + } + ] + }, + "entities": { + "patterns": [ + { + "captures": { + "1": { + "name": "keyword.control.class.perm" + }, + "2": { + "name": "entity.name.type.class.perm" + } + }, + "comment": "Entity name", + "match": "^\\s*(entity)\\s+([.a-zA-Z0-9_:]+)", + "name": "meta.class.perm" + }, + { + "captures": { + "1": { + "name": "keyword.control.relation.perm" + }, + "2": { + "name": "variable.language.perm" + } + }, + "comment": "Relation/Permission name", + "match": "^\\s*(relation|permission)\\s+([.a-zA-Z0-9_:]+)", + "name": "meta.class.perm" + }, + { + "captures": { + "1": { + "name": "keyword.other.action.perm" + }, + "2": { + "name": "variable.language.perm" + } + }, + "comment": "Action/Attribute name", + "match": "^\\s*(action|attribute)\\s+([a-zA-Z0-9_]+)", + "name": "support.function.action.perm" + }, + { + "begin": "\\b(rule)\\s*([a-zA-Z0-9_]+)\\s*(\\()", + "beginCaptures": { + "1": { + "name": "storage.type.function.perm" + }, + "2": { + "name": "entity.name.function.perm" + }, + "3": { + "name": "punctuation.definition.parameters.begin.perm" + } + }, + "comment": "Rules", + "end": "(\\{)", + "endCaptures": { + "1": { + "name": "punctuation.definition.parameters.end.perm" + } + }, + "name": "support.function.action.perm", + "patterns": [ + { + "include": "#function-params" + } + ] + } + ] + }, + "function-params": { + "patterns": [ + { + "begin": "(?=\\w)", + "end": "([,)])", + "endCaptures": { + "1": { + "name": "punctuation.definition.parameters.end.perm" + } + }, + "patterns": [ + { + "captures": { + "1": { + "name": "variable.parameter.function.perm" + }, + "2": { + "name": "support.type.perm" + } + }, + "match": "([a-zA-Z0-9_]+)\\s([a-zA-Z0-9_]+)" + } + ] + } + ] + }, + "keywords": { + "patterns": [ + { + "match": "\\b(return|and|or|not|in)\\b", + "name": "keyword.control.perm" + } + ] + }, + "numbers": { + "patterns": [ + { + "match": "\\b[0-9]+\\b", + "name": "constant.numeric.perm" + } + ] + }, + "operators": { + "patterns": [ + { + "match": "=", + "name": "keyword.operator.assignment.perm" + }, + { + "match": "\\.", + "name": "punctuation.separator.method.perm" + }, + { + "match": "[({}),;]", + "name": "punctuation.definition.parameters.perm" + }, + { + "match": "<|>|<=|>=|==", + "name": "keyword.operator.comparison.perm" + }, + { + "match": "&&|\\|\\||!", + "name": "keyword.operator.logical.perm" + } + ] + }, + "relations": { + "patterns": [ + { + "match": "\\B@\\w+\\b", + "name": "variable.other.readwrite.instance.perm" + }, + { + "match": "\\b#\\w+", + "name": "entity.name.type.attribute-name.perm" + } + ] + }, + "strings": { + "begin": "\"", + "end": "\"", + "name": "string.quoted.double.perm", + "patterns": [ + { + "match": "\\\\.", + "name": "constant.character.escape.perm" + } + ] + }, + "types": { + "patterns": [ + { + "match": "\\b(boolean|string|integer|double)(\\[\\])?\\b", + "name": "support.type.perm" + } + ] + }, + "variables": { + "patterns": [ + { + "captures": { + "1": { + "name": "variable.parameter.perm" + } + }, + "match": "\\b([a-zA-Z0-9_]+)\\b" + }, + { + "captures": { + "1": { + "name": "variable.parameter.perm" + }, + "2": { + "name": "punctuation.separator.method.perm" + }, + "3": { + "name": "entity.name.type.attribute-name.perm" + } + }, + "match": "\\b([a-zA-Z0-9_]+)(\\.)([a-zA-Z0-9_]+)" + } + ] + } + }, + "scopeName": "source.perm" +} From 473995c38c665c005d30c5d663e75a82269d91b8 Mon Sep 17 00:00:00 2001 From: Elior Date: Sat, 8 Jun 2024 18:57:46 +0300 Subject: [PATCH 2/3] fix(strings): fix string recognition --- syntaxes/perm.tmLanguage.json | 41 ++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/syntaxes/perm.tmLanguage.json b/syntaxes/perm.tmLanguage.json index cdabdfb..4aafd6c 100644 --- a/syntaxes/perm.tmLanguage.json +++ b/syntaxes/perm.tmLanguage.json @@ -193,13 +193,44 @@ ] }, "strings": { - "begin": "\"", - "end": "\"", - "name": "string.quoted.double.perm", "patterns": [ { - "match": "\\\\.", - "name": "constant.character.escape.perm" + "name": "string.quoted.single.perm", + "begin": "'", + "end": "'", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.perm" + } + }, + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.perm" + } + }, + "patterns": [{ + "name": "constant.character.escape.perm", + "match": "\\\\." + }] + }, + { + "name": "string.quoted.double.perm", + "begin": "\"", + "end": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.perm" + } + }, + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.perm" + } + }, + "patterns": [{ + "name": "constant.character.escape.perm", + "match": "\\\\." + }] } ] }, From da416066c61171fefccc74d835e5c77f2f080656 Mon Sep 17 00:00:00 2001 From: Elior Date: Sat, 8 Jun 2024 19:04:23 +0300 Subject: [PATCH 3/3] add tmBundle --- Permify.tmbundle/info.plist | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Permify.tmbundle/info.plist diff --git a/Permify.tmbundle/info.plist b/Permify.tmbundle/info.plist new file mode 100644 index 0000000..9c3f8cf --- /dev/null +++ b/Permify.tmbundle/info.plist @@ -0,0 +1,16 @@ + + + + + contactEmailRot13 + + contactName + Ace D Portgas + description + New shiny bundle for X. + name + Permify + uuid + A8CE457F-2140-48A5-84F6-8E30911290E1 + +