Skip to content

Commit 597a2b5

Browse files
committed
add highlighting for typedef when used before class/struct/union
1 parent 8b3c9e3 commit 597a2b5

File tree

7 files changed

+715
-6
lines changed

7 files changed

+715
-6
lines changed

cpp/generate.rb

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ def blockFinderFor( name:"", tag_as:"", start_pattern:nil, needs_semicolon: true
289289
tag_as: "keyword.control.exception.$match"
290290
)
291291
cpp_grammar[:other_keywords] = newPattern(
292-
match: variableBounds[ /(using|typedef)/ ],
292+
match: variableBounds[ /(typedef)/ ],
293293
tag_as: "keyword.other.$match"
294294
)
295295
cpp_grammar[:the_this_keyword] = the_this_keyword = newPattern(
@@ -1283,7 +1283,7 @@ def blockFinderFor( name:"", tag_as:"", start_pattern:nil, needs_semicolon: true
12831283
match: /final/,
12841284
tag_as: "storage.type.modifier.final",
12851285
)
1286-
generateClassOrStructBlockFinder = ->(name) do
1286+
generateClassOrStructBlockFinder = ->(name, tail_includes = [:$initial_context]) do
12871287
return blockFinderFor(
12881288
tag_as: "meta.block.#{name}",
12891289
name: name,
@@ -1340,6 +1340,7 @@ def blockFinderFor( name:"", tag_as:"", start_pattern:nil, needs_semicolon: true
13401340
:comments_context,
13411341
],
13421342
body_includes: [ :function_pointer, :constructor_context, :$initial_context ],
1343+
tail_includes: tail_includes
13431344
)
13441345
end
13451346
cpp_grammar[:class_block] = generateClassOrStructBlockFinder["class"]
@@ -1357,7 +1358,26 @@ def blockFinderFor( name:"", tag_as:"", start_pattern:nil, needs_semicolon: true
13571358
head_includes: [ :$initial_context ],
13581359
secondary_includes: [ :$initial_context ]
13591360
)
1360-
1361+
generateTypedefClassOrStructBlockFinder =-> (name) do
1362+
return PatternRange.new(
1363+
start_pattern: newPattern(
1364+
match: variableBounds[/typedef/],
1365+
tag_as: "keyword.other.typedef"
1366+
).maybe(@spaces).lookAheadFor(variableBounds[/#{name}/]),
1367+
end_pattern: lookBehindFor(/;/),
1368+
includes: [
1369+
generateClassOrStructBlockFinder[name, [
1370+
newPattern(
1371+
match: variable_name,
1372+
tag_as: "entity.name.type.alias"
1373+
)
1374+
]]
1375+
]
1376+
)
1377+
end
1378+
cpp_grammar[:typedef_class] = generateTypedefClassOrStructBlockFinder["class"]
1379+
cpp_grammar[:typedef_struct] = generateTypedefClassOrStructBlockFinder["struct"]
1380+
cpp_grammar[:typedef_union] = generateTypedefClassOrStructBlockFinder["union"]
13611381
#
13621382
# preprocessor directives
13631383
#
@@ -1727,6 +1747,9 @@ def blockFinderFor( name:"", tag_as:"", start_pattern:nil, needs_semicolon: true
17271747
:using_namespace,
17281748
:type_alias,
17291749
:namespace_block,
1750+
:typedef_class,
1751+
:typedef_struct,
1752+
:typedef_union,
17301753
:class_block,
17311754
:struct_block,
17321755
:union_block,

cpp/tags.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ entity.name.function.preprocessor.cpp
2626
entity.name.operator.overloadee.cpp
2727
entity.name.tag.pragma-mark.cpp
2828
entity.name.type.$3.cpp
29+
entity.name.type.alias.cpp
2930
entity.name.type.cpp
3031
entity.name.type.enum.cpp
3132
entity.name.type.inherited.cpp
@@ -86,6 +87,7 @@ keyword.other.namespace.definition.cpp
8687
keyword.other.namespace.directive.cpp
8788
keyword.other.operator.overload.cpp
8889
keyword.other.static_assert.cpp
90+
keyword.other.typedef.cpp
8991
keyword.other.typename.cpp
9092
keyword.other.unit.binary.cpp
9193
keyword.other.unit.exponent.decimal.cpp

0 commit comments

Comments
 (0)