Skip to content

Commit

Permalink
Merge pull request #199 from ds-cbo/add-comment
Browse files Browse the repository at this point in the history
Add comment statement
  • Loading branch information
dmfay authored Oct 4, 2023
2 parents b27337b + 779230c commit 385aff4
Show file tree
Hide file tree
Showing 4 changed files with 191 additions and 13 deletions.
46 changes: 33 additions & 13 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,19 +1,39 @@
ts := $(shell which tree-sitter 2> /dev/null)
ifeq (, ${ts})
ts := $(shell which tree-sitter-cli 2> /dev/null)
CC ?= gcc

TS := $(shell which tree-sitter 2>/dev/null)
ifeq (, ${TS})
TS := $(shell which tree-sitter-cli 2>/dev/null)
endif
TSFLAGS ?=

.PHONY: all
all: compile

.PHONY: clean
clean:
rm src/grammar.json src/parser.c

.PHONY: generate
generate: src/grammar.json src/parser.c
src/grammar.json src/parser.c: grammar.js queries/highlights.scm queries/indents.scm
${TS} generate ${TSFLAGS}

generate:
${ts} generate
.PHONY: regenerate
regenerate: clean generate

test: generate
${ts} test
.PHONY: test
test: src/grammar.json
${TS} test

format: generate
${ts} test --update
.PHONY: format
format: src/grammar.json
${TS} test --update

compile: generate
gcc -shared -o target/parser.so -fPIC src/parser.c -I./src
.PHONY: compile
compile: target/parser.so
target/parser.so: src/parser.c
${CC} -shared -o target/parser.so -fPIC src/parser.c -I./src

check_keywords:
$(shell bash scripts/test-keywords.sh)
.PHONY: check_keywords
check_keywords: src/grammar.json queries/highlights.scm scripts/test-keywords.sh
@bash scripts/test-keywords.sh
52 changes: 52 additions & 0 deletions grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -643,6 +643,7 @@ module.exports = grammar({
$._rename_statement,
$._optimize_statement,
$._merge_statement,
$.comment_statement,
),

_cte: $ => seq(
Expand Down Expand Up @@ -723,6 +724,57 @@ module.exports = grammar({
),
),

comment_statement: $ => seq(
$.keyword_comment,
$.keyword_on,
$._comment_target,
$.keyword_is,
choice(
$.keyword_null,
alias($._literal_string, $.literal),
),
),

_comment_target: $ => choice(
// TODO: access method
// TODO: aggregate
$.cast,
// TODO: collation
seq($.keyword_column, alias($._qualified_field, $.object_reference)),
// TODO: constraint (on domain)
// TODO: conversion
seq($.keyword_database, $.identifier),
// TODO: domain
// TODO: extension
// TODO: event trigger
// TODO: foreign data wrapper
// TODO: foreign table
// TODO: function
seq($.keyword_index, $.object_reference),
// TODO: large object
seq($.keyword_materialized, $.keyword_view, $.object_reference),
// TODO: operator (|class|family)
// TODO: policy
// TODO: (procedural) language
// TODO: procedure
// TODO: publication
seq($.keyword_role, $.identifier),
// TODO: routine
// TODO: rule
seq($.keyword_schema, $.identifier),
seq($.keyword_sequence, $.object_reference),
// TODO: server
// TODO: statistics
// TODO: subscription
seq($.keyword_table, $.object_reference),
seq($.keyword_tablespace, $.identifier),
// TODO: text search (configuration|dictionary|parser|template)
// TODO: transform for
seq($.keyword_trigger, $.identifier, $.keyword_on, $.object_reference),
seq($.keyword_type, $.identifier),
seq($.keyword_view, $.object_reference),
),

select: $ => seq(
$.keyword_select,
seq(
Expand Down
2 changes: 2 additions & 0 deletions scripts/test-keywords.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,5 @@ if [[ "$keywords" ]]; then
echo "$keywords"
exit 1
fi

echo "OK"
104 changes: 104 additions & 0 deletions test/corpus/comment_stat.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
================================================================================
Comment on table
================================================================================

COMMENT ON TABLE my_schema.my_table IS "this table is a test";

--------------------------------------------------------------------------------

(program
(statement
(comment_statement
(keyword_comment)
(keyword_on)
(keyword_table)
(object_reference
schema: (identifier)
name: (identifier))
(keyword_is)
(literal))))

================================================================================
Comment on column is null
================================================================================

COMMENT ON COLUMN my_schema.my_table.my_column IS NULL;

--------------------------------------------------------------------------------

(program
(statement
(comment_statement
(keyword_comment)
(keyword_on)
(keyword_column)
(object_reference
(object_reference
(identifier)
(identifier))
(identifier))
(keyword_is)
(keyword_null))))

================================================================================
Comment on cast
================================================================================

COMMENT ON CAST (varchar AS text) IS "convert varchar to text";

--------------------------------------------------------------------------------

(program
(statement
(comment_statement
(keyword_comment)
(keyword_on)
(cast
(keyword_cast)
(field
(identifier))
(keyword_as)
(keyword_text))
(keyword_is)
(literal))))

================================================================================
Comment on materialized view
================================================================================

COMMENT ON MATERIALIZED VIEW matview IS "this view is materialized";

--------------------------------------------------------------------------------

(program
(statement
(comment_statement
(keyword_comment)
(keyword_on)
(keyword_materialized)
(keyword_view)
(object_reference
(identifier))
(keyword_is)
(literal))))

================================================================================
Comment on trigger
================================================================================

COMMENT ON TRIGGER on_insert ON users IS "new user has been added";

--------------------------------------------------------------------------------

(program
(statement
(comment_statement
(keyword_comment)
(keyword_on)
(keyword_trigger)
(identifier)
(keyword_on)
(object_reference
name: (identifier))
(keyword_is)
(literal))))

0 comments on commit 385aff4

Please sign in to comment.