diff --git a/package-lock.json b/package-lock.json index fe63cfd1..035d2af0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "node-ssdp": "^4.0.0", "postman-request": "^2.88.1-postman.32", "pretty-bytes": "^5.6.0", - "roku-debug": "^0.19.0", + "roku-debug": "^0.19.1", "roku-deploy": "^3.10.2", "roku-test-automation": "^2.0.0-beta.19", "semver": "^7.1.3", @@ -1229,6 +1229,11 @@ "@types/node": "*" } }, + "node_modules/@types/caseless": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", + "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==" + }, "node_modules/@types/chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", @@ -1371,6 +1376,17 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, + "node_modules/@types/request": { + "version": "2.48.8", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz", + "integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==", + "dependencies": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + } + }, "node_modules/@types/revalidator": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/@types/revalidator/-/revalidator-0.3.8.tgz", @@ -1407,6 +1423,11 @@ "integrity": "sha512-ldQl2p7kyCXHhr//5sQCu9jWgSiDbYuCD5dUp53r/z8T8jmgKpANpy4vqjbdho9P2ldFaQC/gpW31hch+oQ0IQ==", "dev": true }, + "node_modules/@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==" + }, "node_modules/@types/vscode": { "version": "1.74.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.74.0.tgz", @@ -4964,6 +4985,19 @@ "node": "*" } }, + "node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -8907,11 +8941,12 @@ } }, "node_modules/roku-debug": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/roku-debug/-/roku-debug-0.19.0.tgz", - "integrity": "sha512-HnAS6y8WG+Y9alJ9oWGlzjlElzKsf1nk5fxVk3l4yzrV/GruL4kXW+l2QrCa30T95jS9Yp/mS9PsmBjspMIJ3w==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/roku-debug/-/roku-debug-0.19.1.tgz", + "integrity": "sha512-Y67K2k6o0QeOq7BH2MWInj7DegSk2azHTdkcuihpBgLNlGLKvXWTJdA4bnpytzM61Oj0izFWewdeA5r3VBOAeA==", "dependencies": { "@rokucommunity/logger": "^0.3.3", + "@types/request": "^2.48.8", "brighterscript": "^0.65.0", "dateformat": "~4", "eol": "^0.9.1", @@ -12443,6 +12478,11 @@ "@types/node": "*" } }, + "@types/caseless": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", + "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==" + }, "@types/chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", @@ -12584,6 +12624,17 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, + "@types/request": { + "version": "2.48.8", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz", + "integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==", + "requires": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + } + }, "@types/revalidator": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/@types/revalidator/-/revalidator-0.3.8.tgz", @@ -12620,6 +12671,11 @@ "integrity": "sha512-ldQl2p7kyCXHhr//5sQCu9jWgSiDbYuCD5dUp53r/z8T8jmgKpANpy4vqjbdho9P2ldFaQC/gpW31hch+oQ0IQ==", "dev": true }, + "@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==" + }, "@types/vscode": { "version": "1.74.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.74.0.tgz", @@ -15334,6 +15390,16 @@ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -18307,11 +18373,12 @@ } }, "roku-debug": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/roku-debug/-/roku-debug-0.19.0.tgz", - "integrity": "sha512-HnAS6y8WG+Y9alJ9oWGlzjlElzKsf1nk5fxVk3l4yzrV/GruL4kXW+l2QrCa30T95jS9Yp/mS9PsmBjspMIJ3w==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/roku-debug/-/roku-debug-0.19.1.tgz", + "integrity": "sha512-Y67K2k6o0QeOq7BH2MWInj7DegSk2azHTdkcuihpBgLNlGLKvXWTJdA4bnpytzM61Oj0izFWewdeA5r3VBOAeA==", "requires": { "@rokucommunity/logger": "^0.3.3", + "@types/request": "^2.48.8", "brighterscript": "^0.65.0", "dateformat": "~4", "eol": "^0.9.1", diff --git a/package.json b/package.json index 44e6d48e..3760fc72 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "node-ssdp": "^4.0.0", "postman-request": "^2.88.1-postman.32", "pretty-bytes": "^5.6.0", - "roku-debug": "^0.19.0", + "roku-debug": "^0.19.1", "roku-deploy": "^3.10.2", "roku-test-automation": "^2.0.0-beta.19", "semver": "^7.1.3", diff --git a/src/grammar/brightscript.tmLanguage.spec.ts b/src/grammar/brightscript.tmLanguage.spec.ts index e40c12c8..c8325949 100644 --- a/src/grammar/brightscript.tmLanguage.spec.ts +++ b/src/grammar/brightscript.tmLanguage.spec.ts @@ -150,6 +150,36 @@ describe('brightscript.tmlanguage.json', () => { `); }); + it('handles comments following interface fields', async () => { + await testGrammar(` + interface Person + name as string 'this is a comment + ' ^^^^^^^^^^^^^^^^^^ punctuation.definition.comment.brs + ' ^^^^^^ storage.type.brs + ' ^^ keyword.control.as.brs + '^^ variable.object.property.brs + + name as string + ' ^^^^^^ storage.type.brs + ' ^^ keyword.control.as.brs + '^^ variable.object.property.brs + `); + }); + + it('handles interface function with return type', async () => { + await testGrammar(` + interface Person + sub test() as string 'this is a comment + ' ^^^^^^^^^^^^^^^^^ punctuation.definition.comment.brs + ' ^^^^^^ storage.type.brs + ' ^^ keyword.control.as.brs + ' ^ punctuation.definition.parameters.end.brs + ' ^ punctuation.definition.parameters.begin.brs + ' ^^^^ entity.name.function.member.brs + '^^^ storage.type.function.brs + `); + }); + it.skip('handles `as Function` parameters properly', async () => { await testGrammar(` function getStyle(builderFunc as Function, processorFunc as Function) as object diff --git a/syntaxes/brightscript.tmLanguage.json b/syntaxes/brightscript.tmLanguage.json index 96212652..a6b2c29a 100644 --- a/syntaxes/brightscript.tmLanguage.json +++ b/syntaxes/brightscript.tmLanguage.json @@ -598,7 +598,7 @@ "name": "punctuation.definition.comment.brs" } }, - "match": "^\\s*?(?i:rem\\s).*$\\n?", + "match": "^\\s*?(?i:rem\\s.*)$", "name": "comment.line.rem.brs" }, "apostrophe_comment": { @@ -607,7 +607,7 @@ "name": "punctuation.definition.comment.brs" } }, - "match": "(').*$\\n?", + "match": "('[^\\r\\n]*)$", "name": "comment.line.apostrophe.brs" }, "keyword_logical_operator": { @@ -730,21 +730,10 @@ "include": "#annotation" }, { - "begin": "(?i)\\s*\\b([a-z0-9_]+)(?:[\\s\\t]*(as))?", - "beginCaptures": { - "1": { - "name": "variable.object.property.brs" - }, - "2": { - "name": "keyword.control.as.brs" - } - }, - "patterns": [ - { - "include": "#type_expression" - } - ], - "end": "\r?\n" + "include": "#interface_function" + }, + { + "include": "#interface_field" } ], "end": "(?i)[\\s\\t]*(end[\\s\\t]*interface)", @@ -754,6 +743,85 @@ } } }, + "interface_field": { + "begin": "(?i)\\s*\\b([a-z0-9_]+)(?:[\\s\\t]*(as))?", + "beginCaptures": { + "1": { + "name": "variable.object.property.brs" + }, + "2": { + "name": "keyword.control.as.brs" + } + }, + "patterns": [ + { + "include": "#type_expression" + }, + { + "include": "#comment" + } + ], + "end": "\r?\n" + }, + "interface_function": { + "patterns": [ + { + "include": "#interface_function_with_return_type" + }, + { + "include": "#interface_function_plain" + } + ] + }, + "interface_function_plain": { + "match": "(?i:\\s*\\b(function|sub)[\\s\\t]+([a-z0-9_]+)(\\())(\\))[\\s\\t]", + "captures": { + "1": { + "name": "storage.type.function.brs" + }, + "2": { + "name": "entity.name.function.member.brs" + }, + "3": { + "name": "punctuation.definition.parameters.begin.brs" + }, + "4": { + "name": "punctuation.definition.parameters.end.brs" + }, + "5": { + "name": "keyword.control.as.brs" + } + } + }, + "interface_function_with_return_type": { + "begin": "(?i:\\s*\\b(function|sub)[\\s\\t]+([a-z0-9_]+)(\\()).*?(\\))[\\s\\t]+(as)", + "beginCaptures": { + "1": { + "name": "storage.type.function.brs" + }, + "2": { + "name": "entity.name.function.member.brs" + }, + "3": { + "name": "punctuation.definition.parameters.begin.brs" + }, + "4": { + "name": "punctuation.definition.parameters.end.brs" + }, + "5": { + "name": "keyword.control.as.brs" + } + }, + "patterns": [ + { + "include": "#type_expression" + }, + { + "include": "#comment" + } + ], + "end": "\r?\n" + }, "enum_declaration": { "name": "meta.enum.declaration.brs", "begin": "(?i)\\b(enum)[ \\t]+([a-zA-Z0-9_]+)\\b",