aboutsummaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'plugin')
-rw-r--r--plugin/syntaxes/cie-pseudocode.tmLanguage.json7
-rw-r--r--plugin/test/highlighting.test.js16
2 files changed, 21 insertions, 2 deletions
diff --git a/plugin/syntaxes/cie-pseudocode.tmLanguage.json b/plugin/syntaxes/cie-pseudocode.tmLanguage.json
index 14ef33c..ef8146f 100644
--- a/plugin/syntaxes/cie-pseudocode.tmLanguage.json
+++ b/plugin/syntaxes/cie-pseudocode.tmLanguage.json
@@ -139,12 +139,15 @@
}
},
"return_type": {
- "match": "(?<!\\w)(RETURNS)\\s+((?<type>[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g<type>(?:\\s*,\\s*\\g<type>)*\\s*>)?(?:\\s*\\.\\.\\.)?))",
+ "match": "(?<!\\w)(RETURNS)\\s+(?:(DEFAULT)\\s+)?((?<type>[A-Za-z_][A-Za-z0-9_]*(?:\\s*<\\s*\\g<type>(?:\\s*,\\s*\\g<type>)*\\s*>)?(?:\\s*\\.\\.\\.)?))",
"captures": {
"1": {
"name": "storage.modifier.cie-pseudocode"
},
"2": {
+ "name": "storage.modifier.cpp"
+ },
+ "3": {
"patterns": [
{
"include": "#type_tokens"
@@ -477,7 +480,7 @@
"name": "keyword.other.operator.overload.cpp"
},
{
- "match": "(?<!\\w)(?:OVERLOAD)(?!\\w)",
+ "match": "(?<!\\w)(?:OVERLOAD|DEFAULT)(?!\\w)",
"name": "storage.modifier.cpp"
},
{
diff --git a/plugin/test/highlighting.test.js b/plugin/test/highlighting.test.js
index 1edac7b..95b10c6 100644
--- a/plugin/test/highlighting.test.js
+++ b/plugin/test/highlighting.test.js
@@ -70,6 +70,22 @@ test('function names include underscores and explicit nested template arguments'
assert.equal('_value'.match(new RegExp(configuration.wordPattern))[0], '_value');
});
+test('default return modifiers preserve builtin and nested result type scopes', () => {
+ for (const [text, names] of [
+ ['OVERLOAD FUNCTION Foo(X : STRING) RETURNS DEFAULT REAL', ['REAL']],
+ ['PUBLIC OVERLOAD FUNCTION Foo() RETURNS DEFAULT Box<Pair<Widget, REAL>>', ['Box', 'Pair', 'Widget', 'REAL']]
+ ]) {
+ assert.ok(scopesAt(text, 'DEFAULT').includes('storage.modifier.cpp'));
+ assert.ok(!scopesAt(text, 'DEFAULT').includes('entity.name.type.cpp'));
+ for (const name of names) {
+ assert.ok(scopesAt(text, name).some(s => /^(entity\.name\.type|storage\.type)\./.test(s)), `${text}: ${name}`);
+ }
+ }
+ assert.ok(!scopesAt('OUTPUT "DEFAULT"', 'DEFAULT').includes('storage.modifier.cpp'));
+ assert.ok(!scopesAt('// DEFAULT', 'DEFAULT').includes('storage.modifier.cpp'));
+ assert.ok(!scopesAt('default()', 'default').includes('storage.modifier.cpp'));
+});
+
test('types are recognized in declarations, signatures, arrays, aliases, constructors and templates', () => {
for (const [text, names] of [
['TYPE Student', ['Student']],