From 8197a3123420b6a3661b2b9d7b4b6285d8426ce7 Mon Sep 17 00:00:00 2001 From: Arturo Salvio <775410+asalvi0@users.noreply.github.com> Date: Sat, 31 Aug 2024 22:59:15 -0600 Subject: [PATCH 1/2] fixed Go binding --- bindings/go/binding.go | 1 + bindings/go/binding_test.go | 2 +- bindings/go/go.mod | 5 -- go.mod | 5 ++ src/scanner.c | 151 ++++++++++++++++++------------------ 5 files changed, 84 insertions(+), 80 deletions(-) delete mode 100644 bindings/go/go.mod create mode 100644 go.mod diff --git a/bindings/go/binding.go b/bindings/go/binding.go index 8c9005a..d3f7a1c 100644 --- a/bindings/go/binding.go +++ b/bindings/go/binding.go @@ -2,6 +2,7 @@ package tree_sitter_dart // #cgo CFLAGS: -std=c11 -fPIC // #include "../../src/parser.c" +// #include "../../src/scanner.c" // // NOTE: if your language has an external scanner, add it here. import "C" diff --git a/bindings/go/binding_test.go b/bindings/go/binding_test.go index 355ff46..956e43b 100644 --- a/bindings/go/binding_test.go +++ b/bindings/go/binding_test.go @@ -3,8 +3,8 @@ package tree_sitter_dart_test import ( "testing" + tree_sitter_dart "github.com/UserNobody14/tree-sitter-dart/bindings/go" tree_sitter "github.com/smacker/go-tree-sitter" - "github.com/tree-sitter/tree-sitter-dart" ) func TestCanLoadGrammar(t *testing.T) { diff --git a/bindings/go/go.mod b/bindings/go/go.mod deleted file mode 100644 index 7806026..0000000 --- a/bindings/go/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/tree-sitter/tree-sitter-dart - -go 1.22 - -require github.com/smacker/go-tree-sitter v0.0.0-20230720070738-0d0a9f78d8f8 diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..32f3a39 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module github.com/UserNobody14/tree-sitter-dart + +go 1.22 + +require github.com/smacker/go-tree-sitter v0.0.0-20240827094217-dd81d9e9be82 diff --git a/src/scanner.c b/src/scanner.c index 4861ab9..a063cf8 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -1,4 +1,4 @@ -#include +#include "tree_sitter/parser.h" #include enum TokenType { @@ -14,114 +14,117 @@ enum TokenType { void *tree_sitter_dart_external_scanner_create() { return NULL; } void tree_sitter_dart_external_scanner_destroy(void *p) {} void tree_sitter_dart_external_scanner_reset(void *p) {} -unsigned tree_sitter_dart_external_scanner_serialize(void *p, char *buffer) { return 0; } -void tree_sitter_dart_external_scanner_deserialize(void *p, const char *b, unsigned n) {} +unsigned tree_sitter_dart_external_scanner_serialize(void *p, char *buffer) { + return 0; +} +void tree_sitter_dart_external_scanner_deserialize(void *p, const char *b, + unsigned n) {} static void advance(TSLexer *lexer) { lexer->advance(lexer, false); } static void skip(TSLexer *lexer) { lexer->advance(lexer, true); } static bool scan_multiline_comments(TSLexer *lexer) { - bool documentation_comment = false; - advance(lexer); - if (lexer->lookahead != '*') return false; - advance(lexer); - if (lexer->lookahead == '*') documentation_comment = true; + bool documentation_comment = false; + advance(lexer); + if (lexer->lookahead != '*') + return false; + advance(lexer); + if (lexer->lookahead == '*') + documentation_comment = true; - bool after_star = false; - unsigned nesting_depth = 1; - for (;;) { - switch (lexer->lookahead) { - case '\0': - return false; - case '*': - advance(lexer); - after_star = true; - break; - case '/': - if (after_star) { - advance(lexer); - after_star = false; - nesting_depth--; - if (nesting_depth == 0) { - if (!documentation_comment) { - lexer->result_symbol = BLOCK_COMMENT; - } else { - lexer->result_symbol = DOCUMENTATION_BLOCK_COMMENT; - } - return true; - } + bool after_star = false; + unsigned nesting_depth = 1; + for (;;) { + switch (lexer->lookahead) { + case '\0': + return false; + case '*': + advance(lexer); + after_star = true; + break; + case '/': + if (after_star) { + advance(lexer); + after_star = false; + nesting_depth--; + if (nesting_depth == 0) { + if (!documentation_comment) { + lexer->result_symbol = BLOCK_COMMENT; } else { - advance(lexer); - after_star = false; - if (lexer->lookahead == '*') { - nesting_depth++; - advance(lexer); - } + lexer->result_symbol = DOCUMENTATION_BLOCK_COMMENT; } - break; - default: + return true; + } + } else { + advance(lexer); + after_star = false; + if (lexer->lookahead == '*') { + nesting_depth++; advance(lexer); - after_star = false; - break; + } } + break; + default: + advance(lexer); + after_star = false; + break; } + } return false; } - static bool scan_templates(TSLexer *lexer, const bool *valid_symbols) { - if(valid_symbols[TEMPLATE_CHARS_DOUBLE]) { - lexer->result_symbol = TEMPLATE_CHARS_DOUBLE; + if (valid_symbols[TEMPLATE_CHARS_DOUBLE]) { + lexer->result_symbol = TEMPLATE_CHARS_DOUBLE; } else if (valid_symbols[TEMPLATE_CHARS_SINGLE]) { - lexer->result_symbol = TEMPLATE_CHARS_SINGLE; + lexer->result_symbol = TEMPLATE_CHARS_SINGLE; } else if (valid_symbols[TEMPLATE_CHARS_SINGLE_SINGLE]) { - lexer->result_symbol = TEMPLATE_CHARS_SINGLE_SINGLE; + lexer->result_symbol = TEMPLATE_CHARS_SINGLE_SINGLE; } else { - lexer->result_symbol = TEMPLATE_CHARS_DOUBLE_SINGLE; + lexer->result_symbol = TEMPLATE_CHARS_DOUBLE_SINGLE; } for (bool has_content = false;; has_content = true) { lexer->mark_end(lexer); switch (lexer->lookahead) { - case '\'': - case '"': - return has_content; - case '\n': - if (valid_symbols[TEMPLATE_CHARS_DOUBLE_SINGLE] || valid_symbols[TEMPLATE_CHARS_SINGLE_SINGLE]) return false; - advance(lexer); - break; - case '\0': + case '\'': + case '"': + return has_content; + case '\n': + if (valid_symbols[TEMPLATE_CHARS_DOUBLE_SINGLE] || + valid_symbols[TEMPLATE_CHARS_SINGLE_SINGLE]) return false; - case '$': - return has_content; - case '\\': - if (valid_symbols[TEMPLATE_CHARS_RAW_SLASH]) { - lexer->result_symbol = TEMPLATE_CHARS_RAW_SLASH; - advance(lexer); - } else { - return has_content; - } - break; - default: + advance(lexer); + break; + case '\0': + return false; + case '$': + return has_content; + case '\\': + if (valid_symbols[TEMPLATE_CHARS_RAW_SLASH]) { + lexer->result_symbol = TEMPLATE_CHARS_RAW_SLASH; advance(lexer); + } else { + return has_content; + } + break; + default: + advance(lexer); } } return true; } - - bool tree_sitter_dart_external_scanner_scan(void *payload, TSLexer *lexer, - const bool *valid_symbols) { - if ( - valid_symbols[TEMPLATE_CHARS_DOUBLE] || + const bool *valid_symbols) { + if (valid_symbols[TEMPLATE_CHARS_DOUBLE] || valid_symbols[TEMPLATE_CHARS_SINGLE] || valid_symbols[TEMPLATE_CHARS_DOUBLE_SINGLE] || - valid_symbols[TEMPLATE_CHARS_SINGLE_SINGLE] - ) { + valid_symbols[TEMPLATE_CHARS_SINGLE_SINGLE]) { return scan_templates(lexer, valid_symbols); } - while (iswspace(lexer->lookahead)) lexer->advance(lexer, true); + while (iswspace(lexer->lookahead)) + lexer->advance(lexer, true); if (lexer->lookahead == '/') { return scan_multiline_comments(lexer); From c2fefa22b37fa4e623a173599a4a098dd06cb88f Mon Sep 17 00:00:00 2001 From: Arturo Salvio <775410+asalvi0@users.noreply.github.com> Date: Sat, 31 Aug 2024 23:03:29 -0600 Subject: [PATCH 2/2] reverted formatting changes --- src/scanner.c | 149 +++++++++++++++++++++++++------------------------- 1 file changed, 73 insertions(+), 76 deletions(-) diff --git a/src/scanner.c b/src/scanner.c index a063cf8..e736bc9 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -14,117 +14,114 @@ enum TokenType { void *tree_sitter_dart_external_scanner_create() { return NULL; } void tree_sitter_dart_external_scanner_destroy(void *p) {} void tree_sitter_dart_external_scanner_reset(void *p) {} -unsigned tree_sitter_dart_external_scanner_serialize(void *p, char *buffer) { - return 0; -} -void tree_sitter_dart_external_scanner_deserialize(void *p, const char *b, - unsigned n) {} +unsigned tree_sitter_dart_external_scanner_serialize(void *p, char *buffer) { return 0; } +void tree_sitter_dart_external_scanner_deserialize(void *p, const char *b, unsigned n) {} static void advance(TSLexer *lexer) { lexer->advance(lexer, false); } static void skip(TSLexer *lexer) { lexer->advance(lexer, true); } static bool scan_multiline_comments(TSLexer *lexer) { - bool documentation_comment = false; - advance(lexer); - if (lexer->lookahead != '*') - return false; - advance(lexer); - if (lexer->lookahead == '*') - documentation_comment = true; + bool documentation_comment = false; + advance(lexer); + if (lexer->lookahead != '*') return false; + advance(lexer); + if (lexer->lookahead == '*') documentation_comment = true; - bool after_star = false; - unsigned nesting_depth = 1; - for (;;) { - switch (lexer->lookahead) { - case '\0': - return false; - case '*': - advance(lexer); - after_star = true; - break; - case '/': - if (after_star) { - advance(lexer); - after_star = false; - nesting_depth--; - if (nesting_depth == 0) { - if (!documentation_comment) { - lexer->result_symbol = BLOCK_COMMENT; + bool after_star = false; + unsigned nesting_depth = 1; + for (;;) { + switch (lexer->lookahead) { + case '\0': + return false; + case '*': + advance(lexer); + after_star = true; + break; + case '/': + if (after_star) { + advance(lexer); + after_star = false; + nesting_depth--; + if (nesting_depth == 0) { + if (!documentation_comment) { + lexer->result_symbol = BLOCK_COMMENT; + } else { + lexer->result_symbol = DOCUMENTATION_BLOCK_COMMENT; + } + return true; + } } else { - lexer->result_symbol = DOCUMENTATION_BLOCK_COMMENT; + advance(lexer); + after_star = false; + if (lexer->lookahead == '*') { + nesting_depth++; + advance(lexer); + } } - return true; - } - } else { - advance(lexer); - after_star = false; - if (lexer->lookahead == '*') { - nesting_depth++; + break; + default: advance(lexer); - } + after_star = false; + break; } - break; - default: - advance(lexer); - after_star = false; - break; } - } return false; } + static bool scan_templates(TSLexer *lexer, const bool *valid_symbols) { - if (valid_symbols[TEMPLATE_CHARS_DOUBLE]) { - lexer->result_symbol = TEMPLATE_CHARS_DOUBLE; + if(valid_symbols[TEMPLATE_CHARS_DOUBLE]) { + lexer->result_symbol = TEMPLATE_CHARS_DOUBLE; } else if (valid_symbols[TEMPLATE_CHARS_SINGLE]) { - lexer->result_symbol = TEMPLATE_CHARS_SINGLE; + lexer->result_symbol = TEMPLATE_CHARS_SINGLE; } else if (valid_symbols[TEMPLATE_CHARS_SINGLE_SINGLE]) { - lexer->result_symbol = TEMPLATE_CHARS_SINGLE_SINGLE; + lexer->result_symbol = TEMPLATE_CHARS_SINGLE_SINGLE; } else { - lexer->result_symbol = TEMPLATE_CHARS_DOUBLE_SINGLE; + lexer->result_symbol = TEMPLATE_CHARS_DOUBLE_SINGLE; } for (bool has_content = false;; has_content = true) { lexer->mark_end(lexer); switch (lexer->lookahead) { - case '\'': - case '"': - return has_content; - case '\n': - if (valid_symbols[TEMPLATE_CHARS_DOUBLE_SINGLE] || - valid_symbols[TEMPLATE_CHARS_SINGLE_SINGLE]) - return false; - advance(lexer); - break; - case '\0': - return false; - case '$': - return has_content; - case '\\': - if (valid_symbols[TEMPLATE_CHARS_RAW_SLASH]) { - lexer->result_symbol = TEMPLATE_CHARS_RAW_SLASH; + case '\'': + case '"': + return has_content; + case '\n': + if (valid_symbols[TEMPLATE_CHARS_DOUBLE_SINGLE] || valid_symbols[TEMPLATE_CHARS_SINGLE_SINGLE]) return false; advance(lexer); - } else { + break; + case '\0': + return false; + case '$': return has_content; - } - break; - default: - advance(lexer); + case '\\': + if (valid_symbols[TEMPLATE_CHARS_RAW_SLASH]) { + lexer->result_symbol = TEMPLATE_CHARS_RAW_SLASH; + advance(lexer); + } else { + return has_content; + } + break; + default: + advance(lexer); } } return true; } + + bool tree_sitter_dart_external_scanner_scan(void *payload, TSLexer *lexer, - const bool *valid_symbols) { - if (valid_symbols[TEMPLATE_CHARS_DOUBLE] || + const bool *valid_symbols) { + if ( + valid_symbols[TEMPLATE_CHARS_DOUBLE] || valid_symbols[TEMPLATE_CHARS_SINGLE] || valid_symbols[TEMPLATE_CHARS_DOUBLE_SINGLE] || - valid_symbols[TEMPLATE_CHARS_SINGLE_SINGLE]) { + valid_symbols[TEMPLATE_CHARS_SINGLE_SINGLE] + ) { return scan_templates(lexer, valid_symbols); } - while (iswspace(lexer->lookahead)) - lexer->advance(lexer, true); + while (iswspace(lexer->lookahead)) lexer->advance(lexer, true); if (lexer->lookahead == '/') { return scan_multiline_comments(lexer);