From e6c3ace08fb83f0fe97837637b68abd73709e3c0 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 14 Dec 2017 10:11:09 -0800 Subject: [PATCH 01/18] Start work on tree-sitter PHP grammar --- grammars/tree-sitter-php.cson | 39 +++++++++++++++++++++++++++++++++++ package.json | 3 +++ 2 files changed, 42 insertions(+) create mode 100644 grammars/tree-sitter-php.cson diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson new file mode 100644 index 00000000..d3518861 --- /dev/null +++ b/grammars/tree-sitter-php.cson @@ -0,0 +1,39 @@ +id: 'php' +name: 'PHP' +type: 'tree-sitter' +parser: 'tree-sitter-php' + +comments: + start: '#' + +fileTypes: [ + 'php' + 'phpt' +] + +folds: [ + { + start: {type: '{', index: 0}, + end: {'}', index: -1} + } + { + start: {type: '(', index: 0}, + end: {')', index: -1} + } +] + +scopes: + '"echo"': 'support.function' + 'string': 'string.quoted' + 'float': 'constant.numeric' + + 'function_call_expression > qualified_name': 'entity.name.function' + 'variable_name': 'variable' + + '"if"': 'keyword.control' + '"else"': 'keyword.control' + '"elseif"': 'keyword.control' + '"endif"': 'keyword.control' + + '"for"': 'keyword.control' + '"while"': 'keyword.control' diff --git a/package.json b/package.json index 09dcb836..9279c523 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,9 @@ "bugs": { "url": "https://github.com/atom/language-php/issues" }, + "dependencies": { + "tree-sitter-php": "^0.1.1" + }, "devDependencies": { "coffeelint": "^1.10.1" } From ef53a52bffbd66612f5112aea8d63a77568f2e15 Mon Sep 17 00:00:00 2001 From: joshvera Date: Thu, 14 Dec 2017 16:52:50 -0800 Subject: [PATCH 02/18] Stub in more syntax --- grammars/tree-sitter-php.cson | 67 +++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index d3518861..af085d7b 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -30,10 +30,73 @@ scopes: 'function_call_expression > qualified_name': 'entity.name.function' 'variable_name': 'variable' + 'program': 'source.php' + 'ERROR': 'syntax-error' + + + 'class_declaration > name': 'support.storage.type' + 'class_base_clause > qualified_name -> name': 'storage.modifier.extends.php' + + 'function_definition > name': 'entity.name.function' + 'function_call_expression > name': 'entity.name.function' + + 'method_declaration > name': 'entity.name.function' + 'method_declaration > function_definition > name': 'entity.name.function' + 'constructor_definition > "__construct"': 'entity.name.function' + + 'object_creation_expression > qualified_name > name': 'meta.class.instance.constructor' + 'object_creation_expression > new_variable > simple_variable': 'meta.class.instance.constructor' + + 'integer': 'constant.numeric.decimal' + 'float': 'constant.numeric.decimal' + 'string': 'string.quoted.single' + 'regex': 'string.regexp' + 'true': 'constant.language.boolean.true' + 'false': 'constant.language.boolean.false' + 'comment': 'comment.block' + + '"("': 'punctuation.definition.parameters.begin.bracket.round' + '")"': 'punctuation.definition.parameters.end.bracket.round' + '"{"': 'punctuation.definition.function.body.begin.bracket.curly' + '"}"': 'punctuation.definition.function.body.end.bracket.curly' + + '"static"': 'storage.modifier' + '"public"': 'storage.modifier' + '"private"': 'storage.modifier' + '"protected"': 'storage.modifier' + '"class"': 'storage.type.class' + '"function"': 'storage.type.function' + '"type"': 'storage.type.type' + + '"+"': 'keyword.operator' + '"-"': 'keyword.operator' + '"*"': 'keyword.operator' + '"/"': 'keyword.operator' + + '"."': 'meta.delimiter.property.period' + '","': 'meta.delimiter.object.comma' + '"if"': 'keyword.control' + '"do"': 'keyword.control' '"else"': 'keyword.control' '"elseif"': 'keyword.control' '"endif"': 'keyword.control' - - '"for"': 'keyword.control' '"while"': 'keyword.control' + '"endwhile"': 'keyword.control' + '"for"': 'keyword.control' + '"endfor"': 'keyword.control' + '"foreach"': 'keyword.control' + '"endforeach"': 'keyword.control' + '"declare"': 'keyword.control' + '"enddeclare"': 'keyword.control' + '"return"': 'keyword.control' + '"break"': 'keyword.control' + '"continue"': 'keyword.control' + '"throw"': 'keyword.control' + '"try"': 'keyword.control' + '"catch"': 'keyword.control' + '"finally"': 'keyword.control' + '"switch"': 'keyword.control' + '"endswitch"': 'keyword.control' + '"case"': 'keyword.control' + '"default"': 'keyword.control' From 867e5eb2815d22ac1be30611df23689daf617cb2 Mon Sep 17 00:00:00 2001 From: joshvera Date: Fri, 15 Dec 2017 15:38:39 -0800 Subject: [PATCH 03/18] Fix css syntax --- grammars/tree-sitter-php.cson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index af085d7b..7d858c5a 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -35,7 +35,7 @@ scopes: 'class_declaration > name': 'support.storage.type' - 'class_base_clause > qualified_name -> name': 'storage.modifier.extends.php' + 'class_base_clause > qualified_name > name': 'storage.modifier.extends.php' 'function_definition > name': 'entity.name.function' 'function_call_expression > name': 'entity.name.function' From 8d68f489e74c1cf03ef2dff5431e69692f5e0f92 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 15 Dec 2017 15:46:42 -0800 Subject: [PATCH 04/18] Use visual studio 2015 on appveyor --- appveyor.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 2b0fde43..7d07d05d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,7 @@ version: "{build}" +image: Visual Studio 2015 + platform: x64 branches: From 205e8a09ddcb5aa7765c4a6f0d6d617ebc555895 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 15 Dec 2017 16:29:37 -0800 Subject: [PATCH 05/18] Add legacy scope name property to tree-sitter grammar --- grammars/tree-sitter-php.cson | 1 + 1 file changed, 1 insertion(+) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index 7d858c5a..58171fd7 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -2,6 +2,7 @@ id: 'php' name: 'PHP' type: 'tree-sitter' parser: 'tree-sitter-php' +legacyScopeName: 'source.php' comments: start: '#' From 65dcc6b799c11715fb946fd6a3d5ce1355e93c12 Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Sat, 15 Sep 2018 01:53:16 +0200 Subject: [PATCH 06/18] :arrow_up: tree-sitter-php --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a09a42fc..d3d1a8e5 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "url": "https://github.com/atom/language-php/issues" }, "dependencies": { - "tree-sitter-php": "^0.1.1" + "tree-sitter-php": "^0.13.0" }, "devDependencies": { "coffeelint": "^1.10.1" From d5b273931195e4408eed70c012ca490b79d75cfe Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Sat, 15 Sep 2018 01:55:37 +0200 Subject: [PATCH 07/18] Update to latest API changes --- grammars/tree-sitter-php.cson | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index 58171fd7..f2475e38 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -1,8 +1,7 @@ -id: 'php' name: 'PHP' +scopeName: 'source.php' type: 'tree-sitter' parser: 'tree-sitter-php' -legacyScopeName: 'source.php' comments: start: '#' From 7f5c9242291f2eca2a6d3946d8a01ceaea6efe69 Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Sat, 15 Sep 2018 01:55:57 +0200 Subject: [PATCH 08/18] Do we commit package-lock??? --- package-lock.json | 169 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..163abd74 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,169 @@ +{ + "name": "language-php", + "version": "0.44.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "coffee-script": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.11.1.tgz", + "integrity": "sha1-vxxHrWREOg2V0S3ysUfMCk2q1uk=", + "dev": true + }, + "coffeelint": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/coffeelint/-/coffeelint-1.16.2.tgz", + "integrity": "sha512-6mzgOo4zb17WfdrSui/cSUEgQ0AQkW3gXDht+6lHkfkqGUtSYKwGdGcXsDfAyuScVzTlTtKdfwkAlJWfqul7zg==", + "dev": true, + "requires": { + "coffee-script": "~1.11.0", + "glob": "^7.0.6", + "ignore": "^3.0.9", + "optimist": "^0.6.1", + "resolve": "^0.6.3", + "strip-json-comments": "^1.0.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "nan": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", + "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "resolve": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", + "integrity": "sha1-3ZV5gufnNt699TtYpN2RdUV13UY=", + "dev": true + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + }, + "tree-sitter-php": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/tree-sitter-php/-/tree-sitter-php-0.13.0.tgz", + "integrity": "sha512-PlYvZJ+bwMVaUvbmDvaVBzsZqhDmx4mILG2Yvz6vhWMThHkq06NWeuV9YX0H7TrYzVBJQ0mF1My4gSPCE/0D0A==", + "requires": { + "nan": "^2.10.0" + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} From bc9eda858d9014086cc9cb058f7d064a605f552a Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Sat, 15 Sep 2018 02:04:51 +0200 Subject: [PATCH 09/18] The scopeName for php is text.html.php --- grammars/tree-sitter-php.cson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index f2475e38..6fb11aba 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -1,5 +1,5 @@ name: 'PHP' -scopeName: 'source.php' +scopeName: 'text.html.php' type: 'tree-sitter' parser: 'tree-sitter-php' From f792eb996df0acc0bb51c535fa4ab3a7b8908db6 Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Mon, 15 Oct 2018 22:39:08 +0200 Subject: [PATCH 10/18] Add more syntax --- grammars/tree-sitter-php.cson | 67 +++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index 6fb11aba..63f845e7 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -24,6 +24,14 @@ folds: [ scopes: '"echo"': 'support.function' + '"print"': 'support.function' + '"unset"': 'support.function' + '"isset"': 'support.function' + '"list"': 'support.function' + '"eval"': 'support.function' + '"array"': 'support.function' + '"list"': 'support.function' + '"empty"': 'support.function' 'string': 'string.quoted' 'float': 'constant.numeric' @@ -33,9 +41,11 @@ scopes: 'program': 'source.php' 'ERROR': 'syntax-error' + 'class_declaration > name': 'entity.name.type.class' + 'class_base_clause > qualified_name > name': 'entity.other.inherited-class' - 'class_declaration > name': 'support.storage.type' - 'class_base_clause > qualified_name > name': 'storage.modifier.extends.php' + 'interface_declaration > name': 'entity.name.type.interface' + 'class_interface_clause > qualified_name > name': 'entity.other.implemented-interface' 'function_definition > name': 'entity.name.function' 'function_call_expression > name': 'entity.name.function' @@ -64,14 +74,63 @@ scopes: '"public"': 'storage.modifier' '"private"': 'storage.modifier' '"protected"': 'storage.modifier' + '"global"': 'storage.modifier' + '"const"': 'storage.modifier' + '"abstract"': 'storage.modifier.abstract' + '"extends"': 'storage.modifier.extends' + '"implements"': 'storage.modifier.implements' + '"final"': 'storage.modifier.final' + '"use"': 'keyword.other.use' + '"namespace"': 'keyword.other.namespace' + '"callable"': 'storage.type' + '"var"': 'storage.type' + '"trait"': 'storage.type.trait' '"class"': 'storage.type.class' + '"interface"': 'storage.type.interface' '"function"': 'storage.type.function' '"type"': 'storage.type.type' + 'cast_expression > cast_type': 'storage.type.cast' '"+"': 'keyword.operator' '"-"': 'keyword.operator' '"*"': 'keyword.operator' '"/"': 'keyword.operator' + '"%"': 'keyword.operator' + '"**"': 'keyword.operator' + '"=="': 'keyword.operator' + '"==="': 'keyword.operator' + '"!="': 'keyword.operator' + '"!="': 'keyword.operator' + '"!=="': 'keyword.operator' + '"<"': 'keyword.operator' + '">"': 'keyword.operator' + '"<>"': 'keyword.operator' + '"<="': 'keyword.operator' + '">="': 'keyword.operator' + '"<=>"': 'keyword.operator' + '"&"': 'keyword.operator' + '"|"': 'keyword.operator' + '"^"': 'keyword.operator' + '"~"': 'keyword.opeator' + '"<<"': 'keyword.operator' + '">>"': 'keyword.operator' + '"++"': 'keyword.operator' + '"--"': 'keyword.operator' + '"and"': 'keyword.operator' + '"or"': 'keyword.operator' + '"xor"': 'keyword.operator' + '"!"': 'keyword.operator' + '"&&"': 'keyword.operator' + '"||"': 'keyword.operator' + '"."': 'keyword.operator' + '"?"': 'keyword.operator' + '":"': 'keyword.operator' + '"??"': 'keyword.operator' + '"as"': 'keyword.operator.logical' + '"new"': 'keyword.other.new' + '"clone"': 'keyword.other.clone' + '"insteadof"': 'keyword.other.insteadof' + '"instanceof"': 'keyword.operator.type' '"."': 'meta.delimiter.property.period' '","': 'meta.delimiter.object.comma' @@ -100,3 +159,7 @@ scopes: '"endswitch"': 'keyword.control' '"case"': 'keyword.control' '"default"': 'keyword.control' + '"yield"': 'keyword.control.yield' + '"goto"': 'keyword.control.goto' + '"exit"': 'keyword.control.exit' + '"die"': 'keyword.control.die' From 41ff847a7b0620bb4a8df0759a5aab01c6b1dd63 Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Tue, 16 Oct 2018 22:45:11 +0200 Subject: [PATCH 11/18] WIP --- grammars/tree-sitter-php.cson | 104 ++++++++++++++++++++-------------- 1 file changed, 62 insertions(+), 42 deletions(-) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index 63f845e7..a1c51c44 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -3,6 +3,10 @@ scopeName: 'text.html.php' type: 'tree-sitter' parser: 'tree-sitter-php' +firstLineRegex: [ + '^\\s*<\\?([pP][hH][pP]|=|\\s|$)' +] + comments: start: '#' @@ -12,14 +16,26 @@ fileTypes: [ ] folds: [ + { + type: 'comment' + } { start: {type: '{', index: 0}, end: {'}', index: -1} } + { + type: ['class_declaration', 'interface_declaration'] + start: {type: '{'}, + end: {type: '}'} + } { start: {type: '(', index: 0}, end: {')', index: -1} } + { + start: {type: '[', index: 0}, + end: {']', index: -1} + } ] scopes: @@ -37,6 +53,7 @@ scopes: 'function_call_expression > qualified_name': 'entity.name.function' 'variable_name': 'variable' + 'member_access_expression > name': 'variable.other.object.property' 'program': 'source.php' 'ERROR': 'syntax-error' @@ -49,6 +66,7 @@ scopes: 'function_definition > name': 'entity.name.function' 'function_call_expression > name': 'entity.name.function' + '"require_once", "require", "include_once", "include"': 'entity.name.function' 'method_declaration > name': 'entity.name.function' 'method_declaration > function_definition > name': 'entity.name.function' @@ -91,48 +109,50 @@ scopes: '"type"': 'storage.type.type' 'cast_expression > cast_type': 'storage.type.cast' - '"+"': 'keyword.operator' - '"-"': 'keyword.operator' - '"*"': 'keyword.operator' - '"/"': 'keyword.operator' - '"%"': 'keyword.operator' - '"**"': 'keyword.operator' - '"=="': 'keyword.operator' - '"==="': 'keyword.operator' - '"!="': 'keyword.operator' - '"!="': 'keyword.operator' - '"!=="': 'keyword.operator' - '"<"': 'keyword.operator' - '">"': 'keyword.operator' - '"<>"': 'keyword.operator' - '"<="': 'keyword.operator' - '">="': 'keyword.operator' - '"<=>"': 'keyword.operator' - '"&"': 'keyword.operator' - '"|"': 'keyword.operator' - '"^"': 'keyword.operator' - '"~"': 'keyword.opeator' - '"<<"': 'keyword.operator' - '">>"': 'keyword.operator' - '"++"': 'keyword.operator' - '"--"': 'keyword.operator' - '"and"': 'keyword.operator' - '"or"': 'keyword.operator' - '"xor"': 'keyword.operator' - '"!"': 'keyword.operator' - '"&&"': 'keyword.operator' - '"||"': 'keyword.operator' - '"."': 'keyword.operator' - '"?"': 'keyword.operator' - '":"': 'keyword.operator' - '"??"': 'keyword.operator' - '"as"': 'keyword.operator.logical' - '"new"': 'keyword.other.new' - '"clone"': 'keyword.other.clone' - '"insteadof"': 'keyword.other.insteadof' - '"instanceof"': 'keyword.operator.type' - - '"."': 'meta.delimiter.property.period' + '"+"': 'keyword.operator.php' + '"-"': 'keyword.operator.php' + '"*"': 'keyword.operator.php' + '"/"': 'keyword.operator.php' + '"%"': 'keyword.operator.php' + '"**"': 'keyword.operator.php' + '"="': 'keyword.operator.php' + '"=="': 'keyword.operator.php' + '"==="': 'keyword.operator.php' + '"!="': 'keyword.operator.php' + '"!="': 'keyword.operator.php' + '"!=="': 'keyword.operator.php' + '"<"': 'keyword.operator.php' + '">"': 'keyword.operator.php' + '"<>"': 'keyword.operator.php' + '"<="': 'keyword.operator.php' + '"=>"': 'keyword.operator.php' + '">="': 'keyword.operator.php' + '"<=>"': 'keyword.operator.php' + '"&"': 'keyword.operator.php' + '"|"': 'keyword.operator.php' + '"^"': 'keyword.operator.php' + '"~"': 'keyword.opeator.php' + '"<<"': 'keyword.operator.php' + '">>"': 'keyword.operator.php' + '"++"': 'keyword.operator.php' + '"--"': 'keyword.operator.php' + '"and"': 'keyword.operator.php' + '"or"': 'keyword.operator.php' + '"xor"': 'keyword.operator.php' + '"!"': 'keyword.operator.php' + '"&&"': 'keyword.operator.php' + '"||"': 'keyword.operator.php' + '"."': 'keyword.operator.php' + '"?"': 'keyword.operator.php' + '":"': 'keyword.operator.php' + '"??"': 'keyword.operator.php' + '"as"': 'keyword.logical' + '"new"': 'keyword.new' + '"clone"': 'keyword.clone' + '"insteadof"': 'keyword.insteadof' + '"instanceof"': 'keyword.type' + + '"->"': 'meta.delimiter.property.arrow' '","': 'meta.delimiter.object.comma' '"if"': 'keyword.control' From 99fce95774bf267c842cbb82ae32a4dd6694666e Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Sun, 28 Oct 2018 22:33:11 +0100 Subject: [PATCH 12/18] scope scoped call expressions --- grammars/tree-sitter-php.cson | 2 ++ 1 file changed, 2 insertions(+) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index a1c51c44..13a8773b 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -52,6 +52,8 @@ scopes: 'float': 'constant.numeric' 'function_call_expression > qualified_name': 'entity.name.function' + 'scoped_call_expression > name': 'entity.name.function' + 'variable_name': 'variable' 'member_access_expression > name': 'variable.other.object.property' From a1f9b2a3fc2f9c1c447483c86cc7abb3a004fe05 Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Sun, 28 Oct 2018 22:42:21 +0100 Subject: [PATCH 13/18] Scope member call expressions and constants Also remove scope for variable and for syntax-error --- grammars/tree-sitter-php.cson | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index 13a8773b..b3b8db2c 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -51,14 +51,9 @@ scopes: 'string': 'string.quoted' 'float': 'constant.numeric' - 'function_call_expression > qualified_name': 'entity.name.function' - 'scoped_call_expression > name': 'entity.name.function' - - 'variable_name': 'variable' 'member_access_expression > name': 'variable.other.object.property' 'program': 'source.php' - 'ERROR': 'syntax-error' 'class_declaration > name': 'entity.name.type.class' 'class_base_clause > qualified_name > name': 'entity.other.inherited-class' @@ -68,6 +63,9 @@ scopes: 'function_definition > name': 'entity.name.function' 'function_call_expression > name': 'entity.name.function' + 'function_call_expression > qualified_name': 'entity.name.function' + 'scoped_call_expression > name': 'entity.name.function' + 'member_call_expression > name': 'entity.name.function' '"require_once", "require", "include_once", "include"': 'entity.name.function' 'method_declaration > name': 'entity.name.function' @@ -77,6 +75,8 @@ scopes: 'object_creation_expression > qualified_name > name': 'meta.class.instance.constructor' 'object_creation_expression > new_variable > simple_variable': 'meta.class.instance.constructor' + 'const_element > name': 'constant' + 'class_constant_access_expression >name': 'constant' 'integer': 'constant.numeric.decimal' 'float': 'constant.numeric.decimal' 'string': 'string.quoted.single' From 2b3bbcd5be2bc573cfad86ab7fbcdb2f968cffce Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Sun, 28 Oct 2018 22:53:08 +0100 Subject: [PATCH 14/18] Turn off useTreeSitterParsers in the textmate specs --- spec/html-spec.coffee | 1 + spec/php-spec.coffee | 1 + 2 files changed, 2 insertions(+) diff --git a/spec/html-spec.coffee b/spec/html-spec.coffee index 398172aa..701476f5 100644 --- a/spec/html-spec.coffee +++ b/spec/html-spec.coffee @@ -2,6 +2,7 @@ describe 'PHP in HTML', -> grammar = null beforeEach -> + atom.config.set('core.useTreeSitterParsers', false) waitsForPromise -> atom.packages.activatePackage 'language-php' diff --git a/spec/php-spec.coffee b/spec/php-spec.coffee index b9dddeb3..e5b6e9ea 100644 --- a/spec/php-spec.coffee +++ b/spec/php-spec.coffee @@ -2,6 +2,7 @@ describe 'PHP grammar', -> grammar = null beforeEach -> + atom.config.set('core.useTreeSitterParsers', false) waitsForPromise -> atom.packages.activatePackage 'language-php' From 218e54f93587a5c2084ddff7bec7ca8497670a60 Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Tue, 30 Oct 2018 15:51:25 +0100 Subject: [PATCH 15/18] Add more scopes Fixes scopes of anonymous nodes Scopes constant.language.php for language constants Scope the class of catch expressions as a class name Change object_creation_expression to scope as entity.name.type.class --- grammars/tree-sitter-php.cson | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index b3b8db2c..a3259898 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -56,8 +56,11 @@ scopes: 'program': 'source.php' 'class_declaration > name': 'entity.name.type.class' + 'catch_clause > qualified_name > name': 'entity.name.type.class' 'class_base_clause > qualified_name > name': 'entity.other.inherited-class' + 'qualified_name > name': {match: /^(TRUE|FALSE|NULL|__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)$/i, scopes: 'constant.language.php'} + 'interface_declaration > name': 'entity.name.type.interface' 'class_interface_clause > qualified_name > name': 'entity.other.implemented-interface' @@ -72,7 +75,7 @@ scopes: 'method_declaration > function_definition > name': 'entity.name.function' 'constructor_definition > "__construct"': 'entity.name.function' - 'object_creation_expression > qualified_name > name': 'meta.class.instance.constructor' + 'object_creation_expression > qualified_name > name': 'entity.name.type.class' 'object_creation_expression > new_variable > simple_variable': 'meta.class.instance.constructor' 'const_element > name': 'constant' @@ -85,10 +88,14 @@ scopes: 'false': 'constant.language.boolean.false' 'comment': 'comment.block' - '"("': 'punctuation.definition.parameters.begin.bracket.round' - '")"': 'punctuation.definition.parameters.end.bracket.round' - '"{"': 'punctuation.definition.function.body.begin.bracket.curly' - '"}"': 'punctuation.definition.function.body.end.bracket.curly' + 'variable_name > "$"': 'punctuation.definition.variable.php' + '"("': 'punctuation.definition.parameters.begin.bracket.round.php' + '")"': 'punctuation.definition.parameters.end.bracket.round.php' + '"{"': 'punctuation.definition.begin.bracket.curly.php' + '"}"': 'punctuation.definition.end.bracket.curly.php' + '"["': 'punctuation.section.array.begin.php' + '"]"': 'punctuation.section.array.end.php' + '";"': 'punctuation.terminator.expression.php' '"static"': 'storage.modifier' '"public"': 'storage.modifier' @@ -154,8 +161,8 @@ scopes: '"insteadof"': 'keyword.insteadof' '"instanceof"': 'keyword.type' - '"->"': 'meta.delimiter.property.arrow' - '","': 'meta.delimiter.object.comma' + '"->"': 'keyword.operator.class' + '","': 'punctuation.separator.delimiter.php' '"if"': 'keyword.control' '"do"': 'keyword.control' From a01097770ce4ca6af415e9b971cdf4c329d02330 Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Fri, 30 Nov 2018 22:03:58 +0100 Subject: [PATCH 16/18] :arrow_up: tree-sitter-php@0.13.1 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 163abd74..1fb0e7a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -104,9 +104,9 @@ "dev": true }, "nan": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", - "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==" + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==" }, "once": { "version": "1.4.0", @@ -146,9 +146,9 @@ "dev": true }, "tree-sitter-php": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/tree-sitter-php/-/tree-sitter-php-0.13.0.tgz", - "integrity": "sha512-PlYvZJ+bwMVaUvbmDvaVBzsZqhDmx4mILG2Yvz6vhWMThHkq06NWeuV9YX0H7TrYzVBJQ0mF1My4gSPCE/0D0A==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/tree-sitter-php/-/tree-sitter-php-0.13.1.tgz", + "integrity": "sha512-Qc7w4D0XG3KGcfcEM9K/YBighVw2uijTIENmqPp32HcCR/8IZwzuNSbAkbD44PPw1WQFvtBZVJqOc91kMH+LPA==", "requires": { "nan": "^2.10.0" } diff --git a/package.json b/package.json index d3d1a8e5..0506e1fe 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "url": "https://github.com/atom/language-php/issues" }, "dependencies": { - "tree-sitter-php": "^0.13.0" + "tree-sitter-php": "^0.13.1" }, "devDependencies": { "coffeelint": "^1.10.1" From a6c6252820c692c334fe74b27701d5113c886827 Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Fri, 30 Nov 2018 22:04:15 +0100 Subject: [PATCH 17/18] Fold formal_parameters --- grammars/tree-sitter-php.cson | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index b3b8db2c..930f6e8e 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -28,6 +28,11 @@ folds: [ start: {type: '{'}, end: {type: '}'} } + { + type: 'formal_parameters' + start: {type: '('} + end: {type: ')'} + } { start: {type: '(', index: 0}, end: {')', index: -1} From a4fcbea09d431fa4802ece4a699671d0ed6ea9c3 Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Fri, 30 Nov 2018 22:04:22 +0100 Subject: [PATCH 18/18] :art: --- grammars/tree-sitter-php.cson | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/grammars/tree-sitter-php.cson b/grammars/tree-sitter-php.cson index 930f6e8e..8409f4f0 100644 --- a/grammars/tree-sitter-php.cson +++ b/grammars/tree-sitter-php.cson @@ -44,6 +44,8 @@ folds: [ ] scopes: + 'program': 'source.php' + '"echo"': 'support.function' '"print"': 'support.function' '"unset"': 'support.function' @@ -58,8 +60,6 @@ scopes: 'member_access_expression > name': 'variable.other.object.property' - 'program': 'source.php' - 'class_declaration > name': 'entity.name.type.class' 'class_base_clause > qualified_name > name': 'entity.other.inherited-class' @@ -107,6 +107,7 @@ scopes: '"final"': 'storage.modifier.final' '"use"': 'keyword.other.use' '"namespace"': 'keyword.other.namespace' + '"callable"': 'storage.type' '"var"': 'storage.type' '"trait"': 'storage.type.trait'