Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit 32b0dba

Browse files
committed
Implement naming conventions
1 parent af1e7f5 commit 32b0dba

File tree

2 files changed

+500
-231
lines changed

2 files changed

+500
-231
lines changed

grammars/tree-sitter-c.cson

+208-96
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,8 @@ comments:
5959

6060
scopes:
6161
'translation_unit': 'source.c'
62-
'comment': 'comment.block'
63-
64-
'identifier': [
65-
{match: '^[A-Z\\d_]+$', scopes: 'constant.other'}
66-
]
6762

63+
# Keyword
6864
'"#if"': 'keyword.control.directive'
6965
'"#ifdef"': 'keyword.control.directive'
7066
'"#ifndef"': 'keyword.control.directive'
@@ -74,112 +70,228 @@ scopes:
7470
'"#define"': 'keyword.control.directive'
7571
'"#include"': 'keyword.control.directive'
7672
'preproc_directive': 'keyword.control.directive'
73+
'"__attribute__"': 'keyword.control.directive'
7774

78-
'"if"': 'keyword.control'
79-
'"else"': 'keyword.control'
80-
'"do"': 'keyword.control'
81-
'"for"': 'keyword.control'
82-
'"while"': 'keyword.control'
83-
'"break"': 'keyword.control'
84-
'"continue"': 'keyword.control'
85-
'"return"': 'keyword.control'
86-
'"switch"': 'keyword.control'
87-
'"case"': 'keyword.control'
88-
'"default"': 'keyword.control'
89-
'"goto"': 'keyword.control'
90-
91-
'"struct"': 'keyword.control'
92-
'"enum"': 'keyword.control'
93-
'"union"': 'keyword.control'
94-
'"typedef"': 'keyword.control'
95-
96-
'preproc_function_def > identifier:nth-child(1)': 'entity.name.function.preprocessor'
97-
'preproc_arg': 'meta.preprocessor.macro'
75+
'"if"': 'keyword.control.condition'
76+
'"else"': 'keyword.control.condition'
77+
'"switch"': 'keyword.control.condition'
78+
'"case"': 'keyword.control.condition'
79+
'"default"': 'keyword.control.condition'
80+
'"do"': 'keyword.control.loop'
81+
'"for"': 'keyword.control.loop'
82+
'"while"': 'keyword.control.loop'
83+
'"break"': 'keyword.control.jump'
84+
'"continue"': 'keyword.control.jump'
85+
'"return"': 'keyword.control.jump'
86+
'"goto"': 'keyword.control.jump'
9887

99-
'''
100-
call_expression > identifier,
101-
call_expression > field_expression > field_identifier,
102-
function_declarator > identifier
103-
''': 'entity.name.function'
88+
'"sizeof"': 'keyword.operator.sizeof'
10489

105-
'statement_identifier': 'constant.variable'
90+
'"+"': 'keyword.operator.arithmetic.symbolic'
91+
'"-"': 'keyword.operator.arithmetic.symbolic'
92+
'binary_expression > "*"': 'keyword.operator.arithmetic.symbolic'
93+
'"/"': 'keyword.operator.arithmetic.symbolic'
94+
'"%"': 'keyword.operator.arithmetic.symbolic'
95+
'"++"': 'keyword.operator.arithmetic.symbolic'
96+
'"--"': 'keyword.operator.arithmetic.symbolic'
10697

107-
'field_identifier': 'variable.other.member'
98+
'binary_expression > "&"': 'keyword.operator.bitwise.symbolic'
99+
'"|"': 'keyword.operator.bitwise.symbolic'
100+
'"^"': 'keyword.operator.bitwise.symbolic'
101+
'"~"': 'keyword.operator.bitwise.symbolic'
102+
'"<<"': 'keyword.operator.bitwise.shift.symbolic'
103+
'">>"': 'keyword.operator.bitwise.shift.symbolic'
108104

109-
'type_identifier': 'support.storage.type'
110-
'primitive_type': 'support.storage.type'
111-
'"signed"': 'support.storage.type'
112-
'"unsigned"': 'support.storage.type'
113-
'"short"': 'support.storage.type'
114-
'"long"': 'support.storage.type'
105+
'"="': 'keyword.operator.assignment.symbolic'
106+
'"+="': 'keyword.operator.assignment.compound.symbolic'
107+
'"-="': 'keyword.operator.assignment.compound.symbolic'
108+
'"*="': 'keyword.operator.assignment.compound.symbolic'
109+
'"/="': 'keyword.operator.assignment.compound.symbolic'
110+
'"%="': 'keyword.operator.assignment.compound.symbolic'
111+
'"<<="': 'keyword.operator.assignment.compound.symbolic'
112+
'">>="': 'keyword.operator.assignment.compound.symbolic'
113+
'"&="': 'keyword.operator.assignment.compound.symbolic'
114+
'"|="': 'keyword.operator.assignment.compound.symbolic'
115+
'"^="': 'keyword.operator.assignment.compound.symbolic'
115116

116-
'char_literal': 'string.quoted.single'
117-
'string_literal': 'string.quoted.double'
118-
'system_lib_string': 'string.quoted.other'
119-
'escape_sequence': 'constant.character.escape'
117+
'"=="': 'keyword.operator.comparison.symbolic'
118+
'"!="': 'keyword.operator.comparison.symbolic'
119+
'"<"': 'keyword.operator.comparison.symbolic'
120+
'">"': 'keyword.operator.comparison.symbolic'
121+
'"<="': 'keyword.operator.comparison.symbolic'
122+
'">="': 'keyword.operator.comparison.symbolic'
120123

121-
'number_literal': 'constant.numeric.decimal'
122-
'null': 'constant.language.null'
123-
'true': 'constant.language.boolean'
124-
'false': 'constant.language.boolean'
124+
'"!"': 'keyword.operator.logical.symbolic'
125+
'"&&"': 'keyword.operator.logical.symbolic'
126+
'"||"': 'keyword.operator.logical.symbolic'
127+
128+
'"&"': 'keyword.operator.pointer.reference.symbolic'
129+
'"*"': 'keyword.operator.pointer.dereference.symbolic'
130+
131+
'"?"': 'keyword.operator.ternary.symbolic'
132+
'conditional_expression > ":"': 'keyword.operator.ternary.symbolic'
133+
134+
# Storage
135+
'"typedef"': 'storage.declaration.datatype'
136+
'"struct"': 'storage.declaration.structure'
137+
'"enum"': 'storage.declaration.enumeration'
138+
'"union"': 'storage.declaration.union'
125139

126-
'auto': 'storage.modifier'
127140
'"extern"': 'storage.modifier'
128-
'"register"': 'storage.modifier'
129141
'"static"': 'storage.modifier'
142+
'"register"': 'storage.modifier'
130143
'"inline"': 'storage.modifier'
131144
'"const"': 'storage.modifier'
132145
'"volatile"': 'storage.modifier'
133146
'"restrict"': 'storage.modifier'
134147
'"_Atomic"': 'storage.modifier'
148+
'auto': 'storage.modifier'
135149
'function_specifier': 'storage.modifier'
136150

137-
'";"': 'punctuation.terminator.statement'
138-
'"["': 'punctuation.definition.begin.bracket.square'
139-
'"]"': 'punctuation.definition.end.bracket.square'
140-
'","': 'punctuation.separator.delimiter'
141-
'char_literal > "\'"': 'punctuation.definition.string'
142-
'string_literal > "\\""': 'punctuation.definition.string'
143-
'"{"': 'punctuation.section.block.begin.bracket.curly'
144-
'"}"': 'punctuation.section.block.end.bracket.curly'
145-
'"("': 'punctuation.section.parens.begin.bracket.round'
146-
'")"': 'punctuation.section.parens.end.bracket.round'
151+
'"unsigned"': 'storage.type.fundamental'
152+
'"signed"': 'storage.type.fundamental'
153+
'"short"': 'storage.type.fundamental'
154+
'"long"': 'storage.type.fundamental'
155+
'primitive_type': 'storage.type.fundamental'
147156

148-
'"sizeof"': 'keyword.operator.sizeof'
149-
'"."': 'keyword.operator.member'
150-
'"->"': 'keyword.operator.member'
151-
'"*"': 'keyword.operator'
152-
'"-"': 'keyword.operator'
153-
'"+"': 'keyword.operator'
154-
'"/"': 'keyword.operator'
155-
'"%"': 'keyword.operator'
156-
'"++"': 'keyword.operator'
157-
'"--"': 'keyword.operator'
158-
'"=="': 'keyword.operator'
159-
'"!"': 'keyword.operator'
160-
'"!="': 'keyword.operator'
161-
'"<"': 'keyword.operator'
162-
'">"': 'keyword.operator'
163-
'">="': 'keyword.operator'
164-
'"<="': 'keyword.operator'
165-
'"&&"': 'keyword.operator'
166-
'"||"': 'keyword.operator'
167-
'"&"': 'keyword.operator'
168-
'"|"': 'keyword.operator'
169-
'"^"': 'keyword.operator'
170-
'"~"': 'keyword.operator'
171-
'"<<"': 'keyword.operator'
172-
'">>"': 'keyword.operator'
173-
'"="': 'keyword.operator'
174-
'"+="': 'keyword.operator'
175-
'"-="': 'keyword.operator'
176-
'"*="': 'keyword.operator'
177-
'"/="': 'keyword.operator'
178-
'"%="': 'keyword.operator'
179-
'"<<="': 'keyword.operator'
180-
'">>="': 'keyword.operator'
181-
'"&="': 'keyword.operator'
182-
'"^="': 'keyword.operator'
183-
'"|="': 'keyword.operator'
184-
'"?"': 'keyword.operator'
185-
'":"': 'keyword.operator'
157+
# Entity
158+
'type_identifier': 'entity.type'
159+
160+
'identifier': [
161+
{
162+
match: '^[A-Z\\d_]+$',
163+
scopes: 'entity.variable.immutable'
164+
},
165+
'entity.variable'
166+
]
167+
168+
'field_identifier': [
169+
{
170+
match: '^[A-Z\\d_]+$',
171+
scopes: 'entity.variable.member.immutable'
172+
},
173+
'entity.variable.member'
174+
]
175+
176+
'statement_identifier': 'entity.label'
177+
178+
'''
179+
preproc_function_def > identifier:nth-child(1),
180+
function_declarator > identifier
181+
''': 'entity.function'
182+
183+
'''
184+
call_expression > identifier,
185+
call_expression > field_expression > field_identifier
186+
''': 'entity.function.call'
187+
188+
# String
189+
'string_literal': 'string.quoted'
190+
'system_lib_string': 'string.quoted'
191+
192+
# Constant
193+
'char_literal': 'constant.character'
194+
'escape_sequence': [
195+
{
196+
match: '^\\\\[uUxftvnrabe0-9]',
197+
scopes: 'constant.character.escape.code'
198+
},
199+
'constant.character.escape'
200+
]
201+
'preproc_include > string_literal > escape_sequence': '' # No escape characters in include directive
202+
203+
'number_literal': 'constant.numeric.decimal'
204+
205+
'null': 'constant.language.null'
206+
'true': 'constant.language.boolean.true'
207+
'false': 'constant.language.boolean.false'
208+
209+
# Comment
210+
'comment': 'comment.block'
211+
212+
# Punctuation
213+
'"."': 'punctuation.accessor.member'
214+
'"->"': 'punctuation.accessor.member'
215+
'";"': 'punctuation.delimiter.statement'
216+
'":"': 'punctuation.delimiter'
217+
'","': 'punctuation.delimiter'
218+
'"("': 'punctuation.delimiter'
219+
'")"': 'punctuation.delimiter'
220+
'"{"': 'punctuation.delimiter'
221+
'"}"': 'punctuation.delimiter'
222+
'"["': 'punctuation.delimiter'
223+
'"]"': 'punctuation.delimiter'
224+
'"..."': 'punctuation.alteration.variadic'
225+
'char_literal > "\'"': 'punctuation.definition.constant.character.quoted'
226+
'string_literal > "\\""': 'punctuation.definition.string.quoted'
227+
228+
'array_declarator > "["': 'punctuation.delimiter.array.size'
229+
'array_declarator > "]"': 'punctuation.delimiter.array.size'
230+
'abstract_array_declarator > "["': 'punctuation.delimiter.array.size'
231+
'abstract_array_declarator > "]"': 'punctuation.delimiter.array.size'
232+
233+
'subscript_expression > "["': 'punctuation.accessor.subscript'
234+
'subscript_expression > "]"': 'punctuation.accessor.subscript'
235+
'subscript_designator > "["': 'punctuation.accessor.subscript'
236+
'subscript_designator > "]"': 'punctuation.accessor.subscript'
237+
238+
'initializer_list > "{"': 'punctuation.definition.collection'
239+
'initializer_list > "}"': 'punctuation.definition.collection'
240+
241+
'compound_statement > "{"': 'punctuation.delimiter.statement'
242+
'compound_statement > "}"': 'punctuation.delimiter.statement'
243+
244+
'function_definition > compound_statement > "{"': 'punctuation.delimiter.body.function'
245+
'function_definition > compound_statement > "}"': 'punctuation.delimiter.body.function'
246+
247+
'enumerator_list > "{"': 'punctuation.delimiter.body.enumeration'
248+
'enumerator_list > "}"': 'punctuation.delimiter.body.enumeration'
249+
250+
'union_specifier > field_declaration_list > "{"': 'punctuation.delimiter.body.union'
251+
'union_specifier > field_declaration_list > "}"': 'punctuation.delimiter.body.union'
252+
253+
'struct_specifier > field_declaration_list > "{"': 'punctuation.delimiter.body.structure'
254+
'struct_specifier > field_declaration_list > "}"': 'punctuation.delimiter.body.structure'
255+
256+
'preproc_params > "("': 'punctuation.delimiter.parameters'
257+
'preproc_params > ")"': 'punctuation.delimiter.parameters'
258+
259+
'parameter_list > "("': 'punctuation.delimiter.parameters'
260+
'parameter_list > ")"': 'punctuation.delimiter.parameters'
261+
'argument_list > "("': 'punctuation.delimiter.arguments'
262+
'argument_list > ")"': 'punctuation.delimiter.arguments'
263+
264+
'sizeof_expression > "("': 'punctuation.delimiter.arguments'
265+
'sizeof_expression > ")"': 'punctuation.delimiter.arguments'
266+
'sizeof_expression > parenthesized_expression > "("': 'punctuation.delimiter.arguments'
267+
'sizeof_expression > parenthesized_expression > ")"': 'punctuation.delimiter.arguments'
268+
269+
'attribute_specifier > "("': 'punctuation.delimiter.arguments'
270+
'attribute_specifier > ")"': 'punctuation.delimiter.arguments'
271+
272+
'cast_expression > "("': 'punctuation.delimiter.cast'
273+
'cast_expression > ")"': 'punctuation.delimiter.cast'
274+
275+
'compound_literal_expression > "("': 'punctuation.delimiter.expression'
276+
'compound_literal_expression > ")"': 'punctuation.delimiter.expression'
277+
278+
'parenthesized_expression > "("': 'punctuation.delimiter.expression'
279+
'parenthesized_expression > ")"': 'punctuation.delimiter.expression'
280+
281+
'for_statement > "("': 'punctuation.delimiter.expression'
282+
'for_statement > ")"': 'punctuation.delimiter.expression'
283+
284+
'ERROR > "."': 'punctuation.accessor.member.invalid.illegal'
285+
'ERROR > "->"': 'punctuation.accessor.member.invalid.illegal'
286+
'ERROR > ";"': 'punctuation.delimiter.statement.invalid.illegal'
287+
'ERROR > ":"': 'punctuation.delimiter.invalid.illegal'
288+
'ERROR > ","': 'punctuation.delimiter.invalid.illegal'
289+
'ERROR > "("': 'punctuation.delimiter.invalid.illegal'
290+
'ERROR > ")"': 'punctuation.delimiter.invalid.illegal'
291+
'ERROR > "{"': 'punctuation.delimiter.invalid.illegal'
292+
'ERROR > "}"': 'punctuation.delimiter.invalid.illegal'
293+
'ERROR > "["': 'punctuation.delimiter.invalid.illegal'
294+
'ERROR > "]"': 'punctuation.delimiter.invalid.illegal'
295+
'ERROR > "..."': 'punctuation.alteration.variadic.invalid.illegal'
296+
'ERROR > "\'"': 'punctuation.definition.constant.character.quoted.invalid.illegal'
297+
'ERROR > "\\""': 'punctuation.definition.string.quoted.invalid.illegal'

0 commit comments

Comments
 (0)