Skip to content

Commit e12752c

Browse files
committed
feat: updated with latest grammar changes
1 parent 75d6274 commit e12752c

File tree

7 files changed

+491
-135
lines changed

7 files changed

+491
-135
lines changed

sdml-ts-mode-abbrev.el

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@
135135
;; Abbrev ❱ Table
136136
;; --------------------------------------------------------------------------
137137

138+
(when sdml-ts-mode--debug-mode
139+
(makunbound 'sdml-ts-mode-abbrev-table))
140+
138141
;; Note you still need a replacement string "" when using
139142
;; skeletons or the original text isn't removed.
140143
(define-abbrev-table 'sdml-ts-mode-abbrev-table

sdml-ts-mode-fold.el

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ It is safe to ignore OFFSET."
7070
(constraint_environment . treesit-fold-range-seq)
7171
(function_body . treesit-fold-range-seq)
7272
(function_signature . sdml-ts-mode--fold-parameters)
73+
(metric_function_signature . sdml-ts-mode--fold-parameters)
7374
(formal_constraint . sdml-ts-mode--fold-formal-constraint-body)
7475
(atomic_sentence . sdml-ts-mode--fold-parameters)
7576
(functional_term . sdml-ts-mode--fold-parameters)
@@ -83,12 +84,13 @@ It is safe to ignore OFFSET."
8384
(from_definition_with . sdml-ts-mode--fold-sequence)
8485
(from_definition_without . sdml-ts-mode--fold-sequence)
8586
(annotation_only_body . treesit-fold-range-seq)
86-
(datatype_def_restriction . treesit-fold-range-seq)
87+
(datatype_type_restrictions . treesit-fold-range-seq)
8788
(dimension_body . treesit-fold-range-seq)
8889
(entity_body . treesit-fold-range-seq)
8990
(source_entity . sdml-ts-mode--fold-sequence)
9091
(enum_body . treesit-fold-range-seq)
9192
(event_body . treesit-fold-range-seq)
93+
(metric_group_body . treesit-fold-range-seq)
9294
(rdf_def . sdml-ts-mode--fold-sequence)
9395
(structure_body . treesit-fold-range-seq)
9496
(type_class_def . sdml-ts-mode--fold-parameters)
@@ -102,15 +104,17 @@ It is safe to ignore OFFSET."
102104
;;;###autoload
103105
(defun sdml-ts-mode-fold-setup ()
104106
"Setup `treesit-fold-mode' and add mode hooks."
107+
(message "Setting up tree-sitter/fold for SDML")
105108
(when sdml-ts-mode--debug-mode
106109
(setq treesit-fold-range-alist
107110
(assq-delete-all 'sdml-ts-mode treesit-fold-range-alist)))
108111

109112
;; install rules into treesit-fold
110113
(add-to-list
111114
'treesit-fold-range-alist
112-
`(sdml-ts-mode . ,sdml-ts-mode--fold-rule-set))
115+
`(sdml-ts-mode . ,sdml-ts-mode-fold--rule-set))
113116

117+
;; add mode hooks by default
114118
(when sdml-ts-mode-enable-folding
115119
(add-hook 'sdml-ts-mode-hook 'treesit-fold-mode)
116120
(add-hook 'sdml-ts-mode-hook 'treesit-fold-indicators-mode)

sdml-ts-mode-font-lock.el

Lines changed: 129 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,15 @@
66
;;; Commentary:
77

88
;; Internal module to organize all font-lock related functionality.
9+
;;
10+
;; Use `treesit-font-lock-level' to determine the amount of detail shown.
911

1012
;;; Code:
1113

1214
(require 'treesit)
1315

16+
(require 'sdml-ts-mode-query)
17+
1418
;; --------------------------------------------------------------------------
1519
;; Font Lock ❱ Faces
1620
;; --------------------------------------------------------------------------
@@ -20,6 +24,16 @@
2024
"Face used for SDML line comments."
2125
:group 'sdml-ts)
2226

27+
(defface sdml-ts-warning-face
28+
'((t (:inherit font-lock-warning-face :weight normal :slant italic)))
29+
"Face used for syntax and other warnings."
30+
:group 'sdml-ts)
31+
32+
(defface sdml-ts-error-face
33+
'((t (:inherit font-lock-warning-face :underline (:style wave :position t))))
34+
"Face used for syntax and other errors."
35+
:group 'sdml-ts)
36+
2337
;; --------------------------------------------------------------------------
2438

2539
(defface sdml-ts-keyword-face
@@ -175,7 +189,7 @@
175189
;; --------------------------------------------------------------------------
176190

177191
(defface sdml-ts-annotation-property-face
178-
'((t (:inherit font-lock-builtin-face :foreground "red3")))
192+
'((t (:inherit font-lock-builtin-face :foreground "DarkGoldenrod4")))
179193
"Face used for annotation property assertions in SDML."
180194
:group 'sdml-ts)
181195

@@ -185,7 +199,7 @@
185199
:group 'sdml-ts)
186200

187201
(defface sdml-ts-annotation-constraint-face
188-
'((t (:inherit sdml-ts-annotation-property-face :foreground "red3")))
202+
'((t (:inherit sdml-ts-annotation-property-face)))
189203
"Face used for annotation constraint names in SDML."
190204
:group 'sdml-ts)
191205

@@ -205,7 +219,7 @@
205219
:group 'sdml-ts)
206220

207221
(defface sdml-ts-variable-face
208-
'((t (:inherit font-variable-use-face)))
222+
'((t (:inherit font-lock-variable-use-face)))
209223
"Face used for variable names in SDML."
210224
:group 'sdml-ts)
211225

@@ -241,7 +255,7 @@
241255
;; --------------------------------------------------------------------------
242256

243257
(defface sdml-ts-separator-face
244-
'((t (:inherit font-lock-delimiter-face)))
258+
'((t (:inherit font-lock-delimiter-face :foreground "DarkSlateGray4")))
245259
"Face used for separator characters and strings in the SDML grammar."
246260
:group 'sdml-ts)
247261

@@ -271,14 +285,56 @@
271285
(treesit-font-lock-rules
272286
:feature 'comments
273287
:language 'sdml
274-
'((line_comment) @sdml-ts-comment-face)
288+
`((,sdml-ts-mode-query--any-comment @sdml-ts-comment-face))
275289

276290
:feature 'global-keywords
277291
:language 'sdml
278-
'([ "as" "assert" "class" "datatype" "dimension" "end" "entity" "enum" "event"
279-
"from" "import" "is" "module" "of" "property" "rdf" "structure" "union"
280-
(unknown_type) ]
281-
@sdml-ts-keyword-face)
292+
`((,sdml-ts-mode-query--global-keywords @sdml-ts-keyword-face)
293+
(builtin_types
294+
[ "anyURI"
295+
"base64Binary"
296+
"binary"
297+
"boolean"
298+
"byte"
299+
"date"
300+
"dateTime"
301+
"dateTimeStamp"
302+
"dayTimeDuration"
303+
"decimal"
304+
"double"
305+
"duration"
306+
"float"
307+
"gDay"
308+
"gMonth"
309+
"gMonthDay"
310+
"gYear"
311+
"gYearMonth"
312+
"hexBinary"
313+
"int"
314+
"integer"
315+
"iri"
316+
"language"
317+
"long"
318+
"negativeInteger"
319+
"nonNegativeInteger"
320+
"nonPositiveInteger"
321+
"normalizedString"
322+
"Nothing"
323+
"positiveInteger"
324+
"rational"
325+
"real"
326+
"short"
327+
"string"
328+
"Thing"
329+
"time"
330+
"token"
331+
"unsigned"
332+
"unsignedByte"
333+
"unsignedInt"
334+
"unsignedLong"
335+
"unsignedShort"
336+
"yearMonthDuration" ]
337+
@sdml-ts-type-builtin-face))
282338

283339
:feature 'binaries
284340
:language 'sdml
@@ -320,20 +376,36 @@
320376

321377
:feature 'formals
322378
:language 'sdml
323-
'((constraint_environment "with" @sdml-ts-keyword-face)
379+
'((sentence_with_environment [ "with" "for" ] @sdml-ts-keyword-face)
380+
(keyword_function_def "def" @sdml-ts-keyword-face)
324381
(function_signature name: (identifier) @sdml-ts-function-def-face)
325-
(function_signature "def" @sdml-ts-keyword-face)
326-
(function_signature target: (_) @sdml-ts-type-reference-face)
382+
(function_signature target: (_) @sdml-ts-type-face)
383+
(function_parameter name: (identifier) @sdml-ts-field-face)
384+
(function_type_reference (identifier_reference) @sdml-ts-type-face)
327385
(cardinality_reference_expression (sequence_ordering) @sdml-ts-keyword-face)
328386
(cardinality_reference_expression (sequence_uniqueness) @sdml-ts-keyword-face)
329-
(function_composition subject: (reserved_self) @sdml-ts-constant-builtin-face)
330-
(function_composition name: (identifier) @sdml-ts-function-call-face)
331387
(atomic_sentence predicate: (term (identifier_reference) @sdml-ts-function-call-face))
388+
(atomic_sentence argument: (term (identifier_reference) @sdml-ts-variable-face))
389+
(equation (term (identifier_reference) @sdml-ts-variable-face))
390+
(inequation (term (identifier_reference) @sdml-ts-variable-face))
391+
(set_expression_sentence (term (identifier_reference) @sdml-ts-variable-face))
392+
(arithmetic_expression_sentence (term (identifier_reference) @sdml-ts-variable-face))
332393
(quantified_variable
333394
(variable name: (identifier) @sdml-ts-variable-face)
334395
((set_op_is_member) @sdml-ts-operator-logical-face))
396+
;; terms
335397
(sequence_builder variable: (variable name: (identifier) @sdml-ts-variable-face))
336-
)
398+
(functional_term
399+
function: (term (identifier_reference) @sdml-ts-function-call-face))
400+
(functional_term
401+
argument: (term (identifier_reference) @sdml-ts-variable-face))
402+
(function_composition subject: (reserved_self) @sdml-ts-constant-builtin-face)
403+
(function_composition subject: (reserved_event) @sdml-ts-constant-builtin-face) ;; TODO: scope this
404+
(function_composition subject: (identifier) @sdml-ts-variable-face)
405+
(function_composition name: (identifier) @sdml-ts-function-call-face)
406+
(term (reserved_self) @sdml-ts-constant-builtin-face)
407+
(term (reserved_event) @sdml-ts-constant-builtin-face)
408+
(reserved_event "event" @sdml-ts-constant-builtin-face))
337409

338410
:feature 'modules
339411
:language 'sdml
@@ -342,7 +414,9 @@
342414
(module_path_absolute segment: (identifier) @sdml-ts-module-face)
343415
(module_path_relative segment: (identifier) @sdml-ts-module-face)
344416
(member_import name: (qualified_identifier) @sdml-ts-type-face)
345-
(module_import name: (identifier) @sdml-ts-module-face))
417+
(member_import rename: (identifier) @sdml-ts-type-face)
418+
(module_import name: (identifier) @sdml-ts-module-face)
419+
(module_import rename: (identifier) @sdml-ts-module-face))
346420

347421
:feature 'facets
348422
:language 'sdml
@@ -367,13 +441,23 @@
367441
"with" @sdml-ts-keyword-face
368442
member: (identifier) @sdml-ts-member-face)
369443
(datatype_def name: (identifier) @sdml-ts-type-def-face)
370-
(datatype_def base: (identifier_reference) @sdml-ts-type-face)
371-
(datatype_def base: (builtin_types) @sdml-ts-builtin-type-face)
444+
(datatype_base_type_reference (identifier_reference) @sdml-ts-type-face)
372445
(datatype_def opaque: (opaque) @sdml-ts-keyword-facet-face)
373446
(dimension_def name: (identifier) @sdml-ts-type-def-face)
374447
(entity_def name: (identifier) @sdml-ts-type-def-face)
375448
(enum_def name: (identifier) @sdml-ts-type-def-face)
376449
(event_def name: (identifier) @sdml-ts-type-def-face)
450+
(event_def name: (identifier) @sdml-ts-type-def-face)
451+
(event_def name: (identifier) @sdml-ts-type-def-face)
452+
(function_signature name: (identifier) @sdml-ts-function-def-face)
453+
(function_signature target: (_) @sdml-ts-type-face)
454+
(function_parameter name: (identifier) @sdml-ts-field-face)
455+
(function_type_reference (identifier_reference) @sdml-ts-type-face)
456+
(cardinality_reference_expression (sequence_ordering) @sdml-ts-keyword-face)
457+
(cardinality_reference_expression (sequence_uniqueness) @sdml-ts-keyword-face)
458+
(metric_group_def name: (identifier) @sdml-ts-type-def-face)
459+
(metric_event_binding "on" @sdml-ts-keyword-face)
460+
(metric_event_binding (identifier_reference) @sdml-ts-type-face)
377461
(rdf_def name: (identifier) @sdml-ts-type-def-face)
378462
(rdf_def [ "a" "type" ] @sdml-ts-keyword-facet-face)
379463
(rdf_def type: (identifier_reference) @sdml-ts-type-def-face)
@@ -387,13 +471,15 @@
387471

388472
:feature 'fields
389473
:language 'sdml
390-
'((member_def name: (identifier) @sdml-ts-field-definition-face)
391-
(member_def target: (type_reference) @sdml-ts-type-reference-face)
474+
'((member_def name: (identifier) @sdml-ts-field-def-face)
475+
(type_reference (identifier_reference) @sdml-ts-type-face)
392476
(annotation_member_def
393477
"@" @sdml-ts-annotation-property-def-face
394478
(member_def name: (identifier) @sdml-ts-annotation-property-def-face))
395479
(property_ref "ref" @sdml-ts-keyword-face)
396480
(property_ref property: (identifier_reference) @sdml-ts-field-face)
481+
(metric_ref "ref" @sdml-ts-keyword-face)
482+
(metric_ref referent: (identifier_reference) @sdml-ts-field-face)
397483
(entity_identity "identity" @sdml-ts-keyword-face)
398484
(dimension_parent "parent" @sdml-ts-keyword-face)
399485
(dimension_parent name: (identifier) @sdml-ts-field-def-face)
@@ -421,6 +507,10 @@
421507
(annotation_property "=" @sdml-ts-operator-assignment-face)
422508
(informal_constraint "=" @sdml-ts-operator-assignment-face)
423509
(function_body [ ":=" "" ] @sdml-ts-operator-assignment-face)
510+
(function_signature [ "->" "" ] @sdml-ts-operator-type-face)
511+
(function_parameter [ "->" "" ] @sdml-ts-operator-type-face)
512+
(mapping_type [ "->" "" ] @sdml-ts-operator-type-face)
513+
(mapping_value [ "->" "" ] @sdml-ts-operator-type-face)
424514
(member_def [ "->" "" ] @sdml-ts-operator-type-face)
425515
(datatype_def [ "<-" "" ] @sdml-ts-operator-type-face)
426516
(type_parameter [ "<-" "" ] @sdml-ts-operator-type-face)
@@ -454,16 +544,16 @@
454544
(constraint_sentence [ "(" ")" ] @sdml-ts-bracket-parameters-face)
455545
(atomic_sentence [ "(" ")" ] @sdml-ts-bracket-parameters-face)
456546
(functional_term [ "(" ")" ] @sdml-ts-bracket-parameters-face)
547+
(mapping_type [ "(" ")" ] @sdml-ts-bracket-parameters-face)
457548
(type_class_def [ "(" ")" ] @sdml-ts-bracket-parameters-face)
458549
(type_parameter_restriction [ "(" ")" ] @sdml-ts-bracket-parameters-face)
459550
(value_constructor [ "(" ")" ] @sdml-ts-bracket-parameters-face))
460551

461552
:feature 'restrictions
462553
:language 'sdml
463554
'((cardinality_reference_expression [ "{" "}" ] @sdml-ts-bracket-restriction-face)
464-
(datatype_def_restriction [ "{" "}" ] @sdml-ts-bracket-restriction-face)
555+
(datatype_type_restrictions [ "{" "}" ] @sdml-ts-bracket-restriction-face)
465556
(sequence_of_predicate_values [ "{" "}" ] @sdml-ts-bracket-restriction-face)
466-
(datatype_def_restriction [ "{" "}" ] @sdml-ts-bracket-restriction-face)
467557
(cardinality_expression [ "{" "}" ] @sdml-ts-bracket-restriction-face)
468558
(sequence_of_values [ "{" "}" ]) @sdml-ts-bracket-restriction-face)
469559

@@ -472,7 +562,11 @@
472562
'((module_path_relative "::" @sdml-ts-separator-module-path-face)
473563
(module_path_absolute "::" @sdml-ts-separator-module-path-face)
474564
(quantified_sentence "," @sdml-ts-separator-qualified-sentence-face)
475-
((seq_builder_separator) @sdml-ts-separator-sequence-builder-face))))
565+
((seq_builder_separator) @sdml-ts-separator-sequence-builder-face))
566+
567+
:feature 'error
568+
:language 'sdml
569+
'((ERROR) @sdml-ts-error-face)))
476570

477571
;; --------------------------------------------------------------------------
478572
;; Tree-Sitter ❱ Font Lock ❱ Features
@@ -482,18 +576,24 @@
482576
(makunbound 'sdml-ts-mode-font-lock--feature-list))
483577

484578
(defvar sdml-ts-mode-font-lock--feature-list
485-
'((comments global-keywords)
486-
(modules definitions fields variants strings booleans numbers binaries iris)
487-
(facets annotations constraints formals)
488-
(operators sequences parameters restrictions delimiters)))
489-
490-
;; --------------------------------------------------------------------------
579+
'(;; Level-1:
580+
(comments)
581+
;; Level-2 adds:
582+
(global-keywords strings binaries iris)
583+
;; Level-3 (default) adds:
584+
(modules definitions fields variants booleans numbers)
585+
;; Level-4 adds:
586+
(operators error sequences parameters restrictions delimiters
587+
facets annotations constraints formals)))
588+
589+
;; ------------------------------------------------------------sdml-ts-mode--defun-name--------------
491590
;; Tree-Sitter ❱ Font Lock ❱ Setup function
492591
;; --------------------------------------------------------------------------
493592

494593
;;;###autoload
495594
(defun sdml-ts-mode-font-lock-setup ()
496595
"Setup `treesit'-based font-lock highlighting."
596+
(message "Setting up tree-sitter/font-lock for SDML")
497597
(setq-local
498598
treesit-font-lock-settings
499599
sdml-ts-mode-font-lock--settings)

sdml-ts-mode-imenu.el

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,24 @@
1616
;; --------------------------------------------------------------------------
1717

1818
(when sdml-ts-mode--debug-mode
19-
(makunbound 'sdml-ts-mode-imenu--rules)
20-
(imenu-flush-cache))
19+
;; maybe: (imenu-flush-cache)
20+
(makunbound 'sdml-ts-mode-imenu--rules))
2121

2222
(defvar sdml-ts-mode-imenu--rules
23-
'())
23+
'(("Module" "\\`module_def``'" nil nil)
24+
("Datatype" "\\`datatype_def``'" nil nil)
25+
("Dimension" "\\`dimension_def``'" nil nil)
26+
("Entity" "\\`entity_def``'" nil nil)
27+
("Enum" "\\`enum_def``'" nil nil)
28+
("Event" "\\`event_def``'" nil nil)
29+
("Property" "\\`property_def``'" nil nil)
30+
("RDF" "\\`rdf_def``'" nil nil)
31+
("Structure" "\\`structure_def``'" nil nil)
32+
("Type Class" "\\`type_class_def``'" nil nil)
33+
("Union" "\\`union_def``'" nil nil)
34+
("Function" "\\`function_signature``'" nil nil)
35+
("Constraint" "\\`constraint``'" nil nil)
36+
))
2437

2538
;; --------------------------------------------------------------------------
2639
;; Tree-Sitter ❱ iMenu ❱ Setup function
@@ -29,12 +42,15 @@
2942
;;;###autoload
3043
(defun sdml-ts-mode-imenu-setup ()
3144
"Setup treesit imenu integration."
45+
(message "Setting up tree-sitter/imenu for SDML")
3246
(when sdml-ts-mode-imenu--rules
47+
48+
(setq imenu-case-fold-search nil)
49+
3350
(setq-local
3451
treesit-simple-imenu-settings
3552
sdml-ts-mode-imenu--rules)))
3653

3754
(provide 'sdml-ts-mode-imenu)
3855

39-
4056
;;; sdml-ts-mode-imenu.el ends here

0 commit comments

Comments
 (0)