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

Implement naming conventions in C and C++ grammars #351

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
315 changes: 213 additions & 102 deletions grammars/tree-sitter-c.cson
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,8 @@ comments:

scopes:
'translation_unit': 'source.c'
'comment': 'comment.block'

'identifier': [
{match: '^[A-Z\\d_]+$', scopes: 'constant.other'}
]

# Keyword
'"#if"': 'keyword.control.directive'
'"#ifdef"': 'keyword.control.directive'
'"#ifndef"': 'keyword.control.directive'
Expand All @@ -74,112 +70,227 @@ scopes:
'"#define"': 'keyword.control.directive'
'"#include"': 'keyword.control.directive'
'preproc_directive': 'keyword.control.directive'
'"__attribute__"': 'keyword.control.directive'

'"if"': 'keyword.control.condition'
'"else"': 'keyword.control.condition'
'"switch"': 'keyword.control.condition'
'"case"': 'keyword.control.condition'
'"default"': 'keyword.control.condition'
'"do"': 'keyword.control.loop'
'"for"': 'keyword.control.loop'
'"while"': 'keyword.control.loop'
'"break"': 'keyword.control.jump'
'"continue"': 'keyword.control.jump'
'"return"': 'keyword.control.jump'
'"goto"': 'keyword.control.jump'

'"sizeof"': 'keyword.operator.sizeof'

'"+"': 'keyword.operator.arithmetic.symbolic'
'"-"': 'keyword.operator.arithmetic.symbolic'
'binary_expression > "*"': 'keyword.operator.arithmetic.symbolic'
'"/"': 'keyword.operator.arithmetic.symbolic'
'"%"': 'keyword.operator.arithmetic.symbolic'
'"++"': 'keyword.operator.arithmetic.symbolic'
'"--"': 'keyword.operator.arithmetic.symbolic'

'binary_expression > "&"': 'keyword.operator.bitwise.symbolic'
'"|"': 'keyword.operator.bitwise.symbolic'
'"^"': 'keyword.operator.bitwise.symbolic'
'"~"': 'keyword.operator.bitwise.symbolic'
'"<<"': 'keyword.operator.bitwise.shift.symbolic'
'">>"': 'keyword.operator.bitwise.shift.symbolic'

'"="': 'keyword.operator.assignment.symbolic'
'"+="': 'keyword.operator.assignment.compound.symbolic'
'"-="': 'keyword.operator.assignment.compound.symbolic'
'"*="': 'keyword.operator.assignment.compound.symbolic'
'"/="': 'keyword.operator.assignment.compound.symbolic'
'"%="': 'keyword.operator.assignment.compound.symbolic'
'"<<="': 'keyword.operator.assignment.compound.symbolic'
'">>="': 'keyword.operator.assignment.compound.symbolic'
'"&="': 'keyword.operator.assignment.compound.symbolic'
'"|="': 'keyword.operator.assignment.compound.symbolic'
'"^="': 'keyword.operator.assignment.compound.symbolic'

'"=="': 'keyword.operator.comparison.symbolic'
'"!="': 'keyword.operator.comparison.symbolic'
'"<"': 'keyword.operator.comparison.symbolic'
'">"': 'keyword.operator.comparison.symbolic'
'"<="': 'keyword.operator.comparison.symbolic'
'">="': 'keyword.operator.comparison.symbolic'

'"!"': 'keyword.operator.logical.symbolic'
'"&&"': 'keyword.operator.logical.symbolic'
'"||"': 'keyword.operator.logical.symbolic'

'"&"': 'keyword.operator.pointer.reference.symbolic'
'"*"': 'keyword.operator.pointer.dereference.symbolic'

'"if"': 'keyword.control'
'"else"': 'keyword.control'
'"do"': 'keyword.control'
'"for"': 'keyword.control'
'"while"': 'keyword.control'
'"break"': 'keyword.control'
'"continue"': 'keyword.control'
'"return"': 'keyword.control'
'"switch"': 'keyword.control'
'"case"': 'keyword.control'
'"default"': 'keyword.control'
'"goto"': 'keyword.control'

'"struct"': 'keyword.control'
'"enum"': 'keyword.control'
'"union"': 'keyword.control'
'"typedef"': 'keyword.control'

'preproc_function_def > identifier:nth-child(1)': 'entity.name.function.preprocessor'
'preproc_arg': 'meta.preprocessor.macro'
'"?"': 'keyword.operator.ternary.symbolic'
'conditional_expression > ":"': 'keyword.operator.ternary.symbolic'

'"unsigned"': 'keyword.type.fundamental'
'"signed"': 'keyword.type.fundamental'
'"short"': 'keyword.type.fundamental'
'"long"': 'keyword.type.fundamental'
'primitive_type': 'keyword.type.fundamental'

'"typedef"': 'keyword.storage.declaration'
'"struct"': 'keyword.storage.declaration'
'"enum"': 'keyword.storage.declaration'
'"union"': 'keyword.storage.declaration'

'"extern"': 'keyword.storage.modifier'
'"static"': 'keyword.storage.modifier'
'"register"': 'keyword.storage.modifier'
'"inline"': 'keyword.storage.modifier'
'"const"': 'keyword.storage.modifier'
'"volatile"': 'keyword.storage.modifier'
'"restrict"': 'keyword.storage.modifier'
'"_Atomic"': 'keyword.storage.modifier'
'"auto"': 'keyword.storage.modifier'
'function_specifier': 'keyword.storage.modifier'

# Entity
'type_identifier': 'entity.type'

'identifier': [
{
match: '^[A-Z\\d_]+$',
scopes: 'entity.variable.immutable'
},
'entity.variable'
]

'field_identifier': [
{
match: '^[A-Z\\d_]+$',
scopes: 'entity.variable.member.immutable'
},
'entity.variable.member'
]

'statement_identifier': 'entity.label'

'''
call_expression > identifier,
call_expression > field_expression > field_identifier,
preproc_function_def > identifier:nth-child(1),
function_declarator > identifier
''': 'entity.name.function'

'statement_identifier': 'constant.variable'
''': 'entity.function'

'field_identifier': 'variable.other.member'
'''
call_expression > identifier,
call_expression > field_expression > field_identifier
''': 'entity.function.call'

'type_identifier': 'support.storage.type'
'primitive_type': 'support.storage.type'
'"signed"': 'support.storage.type'
'"unsigned"': 'support.storage.type'
'"short"': 'support.storage.type'
'"long"': 'support.storage.type'
# String
'string_literal': 'string.quoted'
'system_lib_string': 'string.quoted'

'char_literal': 'string.quoted.single'
'string_literal': 'string.quoted.double'
'system_lib_string': 'string.quoted.other'
'escape_sequence': 'constant.character.escape'
# Constant
'char_literal': 'constant.character'
'escape_sequence': [
{
match: '^\\\\[uUxftvnrabe0-9]',
scopes: 'constant.character.escape.code'
},
'constant.character.escape'
]
'preproc_include > string_literal > escape_sequence': '' # No escape characters in include directive

'number_literal': 'constant.numeric.decimal'

'null': 'constant.language.null'
'true': 'constant.language.boolean'
'false': 'constant.language.boolean'

'auto': 'storage.modifier'
'"extern"': 'storage.modifier'
'"register"': 'storage.modifier'
'"static"': 'storage.modifier'
'"inline"': 'storage.modifier'
'"const"': 'storage.modifier'
'"volatile"': 'storage.modifier'
'"restrict"': 'storage.modifier'
'"_Atomic"': 'storage.modifier'
'function_specifier': 'storage.modifier'

'";"': 'punctuation.terminator.statement'
'"["': 'punctuation.definition.begin.bracket.square'
'"]"': 'punctuation.definition.end.bracket.square'
'","': 'punctuation.separator.delimiter'
'char_literal > "\'"': 'punctuation.definition.string'
'true': 'constant.language.boolean.true'
'false': 'constant.language.boolean.false'

# Comment
'comment': 'comment.block'

# Punctuation
'"."': 'punctuation.accessor.member'
'"->"': 'punctuation.accessor.member'
'","': 'punctuation.separator'
'";"': 'punctuation.terminator'
'":"': 'punctuation.delimiter'
'"("': 'punctuation.delimiter'
'")"': 'punctuation.delimiter'
'"{"': 'punctuation.delimiter'
'"}"': 'punctuation.delimiter'
'"["': 'punctuation.delimiter'
'"]"': 'punctuation.delimiter'
'"..."': 'punctuation.definition.variadic'
'char_literal > "\'"': 'punctuation.definition.constant.character'
'string_literal > "\\""': 'punctuation.definition.string'
'"{"': 'punctuation.section.block.begin.bracket.curly'
'"}"': 'punctuation.section.block.end.bracket.curly'
'"("': 'punctuation.section.parens.begin.bracket.round'
'")"': 'punctuation.section.parens.end.bracket.round'

'"sizeof"': 'keyword.operator.sizeof'
'"."': 'keyword.operator.member'
'"->"': 'keyword.operator.member'
'"*"': 'keyword.operator'
'"-"': 'keyword.operator'
'"+"': 'keyword.operator'
'"/"': 'keyword.operator'
'"%"': 'keyword.operator'
'"++"': 'keyword.operator'
'"--"': 'keyword.operator'
'"=="': 'keyword.operator'
'"!"': 'keyword.operator'
'"!="': 'keyword.operator'
'"<"': 'keyword.operator'
'">"': 'keyword.operator'
'">="': 'keyword.operator'
'"<="': 'keyword.operator'
'"&&"': 'keyword.operator'
'"||"': 'keyword.operator'
'"&"': 'keyword.operator'
'"|"': 'keyword.operator'
'"^"': 'keyword.operator'
'"~"': 'keyword.operator'
'"<<"': 'keyword.operator'
'">>"': 'keyword.operator'
'"="': 'keyword.operator'
'"+="': 'keyword.operator'
'"-="': 'keyword.operator'
'"*="': 'keyword.operator'
'"/="': 'keyword.operator'
'"%="': 'keyword.operator'
'"<<="': 'keyword.operator'
'">>="': 'keyword.operator'
'"&="': 'keyword.operator'
'"^="': 'keyword.operator'
'"|="': 'keyword.operator'
'"?"': 'keyword.operator'
'":"': 'keyword.operator'
'array_declarator > "["': 'punctuation.delimiter.array.size'
'array_declarator > "]"': 'punctuation.delimiter.array.size'
'abstract_array_declarator > "["': 'punctuation.delimiter.array.size'
'abstract_array_declarator > "]"': 'punctuation.delimiter.array.size'

'subscript_expression > "["': 'punctuation.delimiter.subscript'
'subscript_expression > "]"': 'punctuation.delimiter.subscript'
'subscript_designator > "["': 'punctuation.delimiter.subscript'
'subscript_designator > "]"': 'punctuation.delimiter.subscript'

'initializer_list > "{"': 'punctuation.definition.collection'
'initializer_list > "}"': 'punctuation.definition.collection'

'compound_statement > "{"': 'punctuation.delimiter.statement'
'compound_statement > "}"': 'punctuation.delimiter.statement'

'function_definition > compound_statement > "{"': 'punctuation.delimiter.body.function'
'function_definition > compound_statement > "}"': 'punctuation.delimiter.body.function'

'enumerator_list > "{"': 'punctuation.delimiter.body.enumeration'
'enumerator_list > "}"': 'punctuation.delimiter.body.enumeration'

'union_specifier > field_declaration_list > "{"': 'punctuation.delimiter.body.union'
'union_specifier > field_declaration_list > "}"': 'punctuation.delimiter.body.union'

'struct_specifier > field_declaration_list > "{"': 'punctuation.delimiter.body.structure'
'struct_specifier > field_declaration_list > "}"': 'punctuation.delimiter.body.structure'

'preproc_params > "("': 'punctuation.delimiter.parameters'
'preproc_params > ")"': 'punctuation.delimiter.parameters'

'parameter_list > "("': 'punctuation.delimiter.parameters'
'parameter_list > ")"': 'punctuation.delimiter.parameters'
'argument_list > "("': 'punctuation.delimiter.arguments'
'argument_list > ")"': 'punctuation.delimiter.arguments'

'sizeof_expression > "("': 'punctuation.delimiter.arguments'
'sizeof_expression > ")"': 'punctuation.delimiter.arguments'
'sizeof_expression > parenthesized_expression > "("': 'punctuation.delimiter.arguments'
'sizeof_expression > parenthesized_expression > ")"': 'punctuation.delimiter.arguments'

'attribute_specifier > "("': 'punctuation.delimiter.arguments'
'attribute_specifier > ")"': 'punctuation.delimiter.arguments'

'cast_expression > "("': 'punctuation.delimiter.cast'
'cast_expression > ")"': 'punctuation.delimiter.cast'

'compound_literal_expression > "("': 'punctuation.delimiter.expression'
'compound_literal_expression > ")"': 'punctuation.delimiter.expression'

'parenthesized_expression > "("': 'punctuation.delimiter.expression'
'parenthesized_expression > ")"': 'punctuation.delimiter.expression'

'for_statement > "("': 'punctuation.delimiter.expression'
'for_statement > ")"': 'punctuation.delimiter.expression'

'ERROR > "."': 'punctuation.accessor.member.invalid.illegal'
'ERROR > "->"': 'punctuation.accessor.member.invalid.illegal'
'ERROR > ","': 'punctuation.separator.invalid.illegal'
'ERROR > ";"': 'punctuation.terminator.invalid.illegal'
'ERROR > ":"': 'punctuation.delimiter.invalid.illegal'
'ERROR > "("': 'punctuation.delimiter.invalid.illegal'
'ERROR > ")"': 'punctuation.delimiter.invalid.illegal'
'ERROR > "{"': 'punctuation.delimiter.invalid.illegal'
'ERROR > "}"': 'punctuation.delimiter.invalid.illegal'
'ERROR > "["': 'punctuation.delimiter.invalid.illegal'
'ERROR > "]"': 'punctuation.delimiter.invalid.illegal'
'ERROR > "..."': 'punctuation.definition.variadic.invalid.illegal'
'ERROR > "\'"': 'punctuation.definition.constant.character.invalid.illegal'
'ERROR > "\\""': 'punctuation.definition.string.invalid.illegal'
Loading