From a5c50262d905037ca69c80debb46aba3cc381201 Mon Sep 17 00:00:00 2001 From: Stephan Seitz Date: Fri, 15 May 2020 18:49:21 +0200 Subject: Add python locals.scm --- queries/python/locals.scm | 65 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 queries/python/locals.scm (limited to 'queries/python') diff --git a/queries/python/locals.scm b/queries/python/locals.scm new file mode 100644 index 000000000..763d1b77d --- /dev/null +++ b/queries/python/locals.scm @@ -0,0 +1,65 @@ +;;; Programm structure +(module) @scope + +(class_definition + body: (block + (expression_statement + (assignment + left: (expression_list + (identifier) @definition.associated))))) @scope + +; Function with parameters, defines parameters +(function_definition + name: (identifier) + parameters: (parameters + (identifier) @definition.var)) + +; Function defines function and scope +(function_definition + name: (identifier) @definition.function) @scope + +(class_definition + name: (identifier) @definition.type) @scope + +(class_definition + body: (block + (function_definition + name: (identifier) @definition.method))) + +;;; Loops +; not a scope! +(for_statement + left: (variables + (identifier) @definition.var)) + +; not a scope! +;(while_statement) @scope + +; for in list comprehension +(for_in_clause + left: (variables + (identifier) @definition.var)) + +(dictionary_comprehension) @scope +(list_comprehension) @scope +(set_comprehension) @scope + +;;; Assignments + +(assignment + left: (expression_list + (identifier) @definition.var)) + +(assignment + left: (expression_list + (attribute + (identifier) + (identifier) @definition.field))) + +; Walrus operator x := 1 +(named_expression + (identifier) @definition.var) + + +;;; REFERENCES +(identifier) @reference -- cgit v1.2.3-70-g09d2 From 57424533a77cd80accc128457ea59a7241ce0197 Mon Sep 17 00:00:00 2001 From: Stephan Seitz Date: Sat, 16 May 2020 19:24:27 +0200 Subject: Add python/highlights.scm from tree-sitter-python --- queries/python/highlights.scm | 176 ++++++++++++++++++++++++++++++++++++++++++ queries/python/locals.scm | 6 ++ 2 files changed, 182 insertions(+) create mode 100644 queries/python/highlights.scm (limited to 'queries/python') diff --git a/queries/python/highlights.scm b/queries/python/highlights.scm new file mode 100644 index 000000000..f953efd0c --- /dev/null +++ b/queries/python/highlights.scm @@ -0,0 +1,176 @@ +;; From tree-sitter-python licensed under MIT License +; Copyright (c) 2016 Max Brunsfeld + +; Identifier naming conventions + + +((import_from_statement + name: (dotted_name + (identifier)) @type) + (match? @type "^[A-Z]")) + +((identifier) @constant + (match? @constant "^[A-Z][A-Z_]*$")) + +; Function calls + +(decorator) @function + +(call + function: (attribute + attribute: (identifier) @method)) + +(call + function: (identifier) @function) + +((call + (identifier) @constructor) + (match? @constructor "^[A-Z]")) + +;; Builtin functions + +((call + function: (identifier) @function.builtin) + (match? + @function.builtin + "^(abs|all|any|ascii|bin|bool|breakpoint|bytearray|bytes|callable|chr|classmethod|compile|complex|delattr|dict|dir|divmod|enumerate|eval|exec|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|isinstance|issubclass|iter|len|list|locals|map|max|memoryview|min|next|object|oct|open|ord|pow|print|property|range|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|vars|zip|__import__)$")) + +;; Function definitions + +(function_definition + name: (identifier) @function) + +(identifier) @variable +(attribute attribute: (identifier) @property) +(type (identifier) @type) +(parameters + (identifier) @parameter) + +; Literals + +(none) @constant.builtin +(true) @boolean +(false) @boolean +((identifier) @constant.builtin + (match? @constant.builtin "self")) + +(integer) @number +(float) @float + +(comment) @comment +(string) @string +(escape_sequence) @escape + +(interpolation + "{" @punctuation.special + "}" @punctuation.special) @embedded + +; Tokens + +"-" @operator +"-=" @operator +"!=" @operator +"*" @operator +"**" @operator +"**=" @operator +"*=" @operator +"/" @operator +"//" @operator +"//=" @operator +"/=" @operator +"&" @operator +"%" @operator +"%=" @operator +"^" @operator +"+" @operator +"+=" @operator +"<" @operator +"<<" @operator +"<=" @operator +"<>" @operator +"=" @operator +"==" @operator +">" @operator +">=" @operator +">>" @operator +"|" @operator +"~" @operator +"and" @operator +"in" @operator +"is" @operator +"not" @operator +"or" @operator + +; Keywords + +"as" @keyword +"assert" @keyword +"async" @keyword +"await" @keyword +"break" @repeat +"class" @keyword +"continue" @repeat +"def" @keyword +"del" @keyword +"elif" @conditional +"else" @conditional +"except" @keyword +"exec" @keyword +"finally" @keyword +"for" @repeat +"from" @keyword +"global" @keyword +"if" @conditional +"import" @keyword +"lambda" @keyword +"nonlocal" @keyword +"pass" @keyword +"print" @keyword +"raise" @keyword +"return" @keyword +"try" @keyword +"while" @repeat +"with" @keyword +"yield" @keyword + +; Additions for nvim-treesitter +"(" @punctuation.bracket +")" @punctuation.bracket +"[" @punctuation.bracket +"]" @punctuation.bracket + +"," @punctuation.delimiter +"." @punctuation.delimiter +":" @punctuation.delimiter + +(class_definition + name: (identifier) @type) + +(attribute + attribute: (identifier) @field) + +((attribute + attribute: (identifier) @constant) + (match? @constant "^[A-Z][A-Z_]*$")) + +((attribute + attribute: (identifier) @type) + (match? @type "^[A-Z][a-z_]+")) + +(class_definition + body: (block + (expression_statement + (assignment + left: (expression_list + (identifier) @field))))) + +((class_definition + body: (block + (expression_statement + (assignment + left: (expression_list + (identifier) @constant))))) + (match? @constant "^[A-Z][A-Z_]*$")) + +;; Error +(ERROR) @error diff --git a/queries/python/locals.scm b/queries/python/locals.scm index 763d1b77d..bc33d306b 100644 --- a/queries/python/locals.scm +++ b/queries/python/locals.scm @@ -18,6 +18,12 @@ (function_definition name: (identifier) @definition.function) @scope +;; Should be extended to when syntax supported +;(function_definition + ;name: (identifier) @definition.function + ;body: (block (expression_statement (string) @definition.function.doc)?)) @scope + + (class_definition name: (identifier) @definition.type) @scope -- cgit v1.2.3-70-g09d2 From f6bf56974ea3ee4a2640c9ddd1b42c20a53188cc Mon Sep 17 00:00:00 2001 From: Stephan Seitz Date: Sun, 17 May 2020 17:07:27 +0200 Subject: Introduce `@include` --- CONTRIBUTING.md | 1 + lua/nvim-treesitter/highlight.lua | 1 + queries/python/highlights.scm | 6 +++--- 3 files changed, 5 insertions(+), 3 deletions(-) (limited to 'queries/python') diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5335d04ea..ea31f573e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -79,6 +79,7 @@ are optional and will not have any effect for now. `@operator` `@keyword` `@exception` +`@include` keywords for including modules (e.g. import/from in Python) `@type` `builtin` diff --git a/lua/nvim-treesitter/highlight.lua b/lua/nvim-treesitter/highlight.lua index c1981aff8..ac46010bb 100644 --- a/lua/nvim-treesitter/highlight.lua +++ b/lua/nvim-treesitter/highlight.lua @@ -47,6 +47,7 @@ hlmap["exception"] = "Exception" hlmap["type"] = "Type" hlmap["type.builtin"] = "Type" hlmap["structure"] = "Structure" +hlmap["include"] = "Include" function M.attach(bufnr, ft) local buf = bufnr or api.nvim_get_current_buf() diff --git a/queries/python/highlights.scm b/queries/python/highlights.scm index f953efd0c..4cd8b8998 100644 --- a/queries/python/highlights.scm +++ b/queries/python/highlights.scm @@ -103,7 +103,7 @@ ; Keywords -"as" @keyword +"as" @include "assert" @keyword "async" @keyword "await" @keyword @@ -118,10 +118,10 @@ "exec" @keyword "finally" @keyword "for" @repeat -"from" @keyword +"from" @include "global" @keyword "if" @conditional -"import" @keyword +"import" @include "lambda" @keyword "nonlocal" @keyword "pass" @keyword -- cgit v1.2.3-70-g09d2