diff --git a/README.md b/README.md index 95f6381..9e92606 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,18 @@ ## string-html-css -一个高亮js代码中的 html/css/scss/sass/less的字符串, 并支持emmet. \ No newline at end of file +一个高亮js代码中的 html/css/scss/sass/less的字符串, 并支持emmet. + +```js + +const foo = css` + .foo { color: red } +` + +const foo = scss` + .foo { color: red } +` + +const foo = html` +
hello
+` + +``` \ No newline at end of file diff --git a/src/providers/css.ts b/src/providers/css.ts index f1b329e..c8395f6 100644 --- a/src/providers/css.ts +++ b/src/providers/css.ts @@ -131,7 +131,8 @@ export class HTMLStyleCompletionItemProvider implements CompletionItemProvider { export class CSSCompletionItemProvider implements CompletionItemProvider { private _CSSLanguageService: CSSLanguageService = GetCSSLanguageService() - private _expression = /(\/\*\s*(css|less|scss)\s*\*\/\s*`|css\s*`)([^`]*)(`)/g + private _expression = + /(\/\*\s*(css|less|scss|sass)\s*\*\/\s*`|(scss|sass|less|css)\s*`)([^`]*)(`)/g private _cache = new CompletionsCache() public provideCompletionItems( diff --git a/src/util.ts b/src/util.ts index 109cfc6..044ef7c 100644 --- a/src/util.ts +++ b/src/util.ts @@ -54,10 +54,7 @@ export function MatchOffset( return null } -export function Match( - regex: RegExp, - data: string -): RegExpMatchArray { +export function Match(regex: RegExp, data: string): RegExpMatchArray { regex.exec(null) let match: RegExpExecArray @@ -115,9 +112,15 @@ export function TranslateHTMLTextEdits( offset: number ): TextEdit[] { return input.map((item: HTMLTextEdit) => { - const startPosition = new Position(item.range.start.line + offset, item.range.start.character); - const endPosition = new Position(item.range.end.line + offset - 1, item.range.end.character); - const itemRange = new Range(startPosition, endPosition); + const startPosition = new Position( + item.range.start.line + offset, + item.range.start.character + ) + const endPosition = new Position( + item.range.end.line + offset - 1, + item.range.end.character + ) + const itemRange = new Range(startPosition, endPosition) return new TextEdit(itemRange, item.newText) }) } diff --git a/syntaxes/es6.inline.css.json b/syntaxes/es6.inline.css.json index cc936b6..af2f3a0 100644 --- a/syntaxes/es6.inline.css.json +++ b/syntaxes/es6.inline.css.json @@ -1,15 +1,10 @@ { - "fileTypes": [ - "js", - "jsx", - "ts", - "tsx" - ], + "fileTypes": ["js", "jsx", "ts", "tsx"], "injectionSelector": "L:source.js -comment -string, L:source.jsx -comment -string, L:source.ts -comment -string, L:source.tsx -comment -string", "patterns": [ { "contentName": "meta.embedded.block.css", - "begin": "(?x)(\\s*?(\\w+\\.)?(?:css|\/\\*\\s*css\\s*\\*\/)\\s*)(`)", + "begin": "(?x)(\\s*?(\\w+\\.)?(?:css|/\\*\\s*css\\s*\\*/)\\s*)(`)", "beginCaptures": { "0": { "name": "string.template.ts, punctuation.definition.string.template.begin.ts" @@ -38,4 +33,4 @@ } ], "scopeName": "es6.inline.css" -} \ No newline at end of file +} diff --git a/syntaxes/es6.inline.html.json b/syntaxes/es6.inline.html.json index 32a8ff0..66b6fe9 100644 --- a/syntaxes/es6.inline.html.json +++ b/syntaxes/es6.inline.html.json @@ -1,10 +1,5 @@ { - "fileTypes": [ - "js", - "jsx", - "ts", - "tsx" - ], + "fileTypes": ["js", "jsx", "ts", "tsx"], "injectionSelector": "L:source.js -comment -string, L:source.jsx -comment -string, L:source.ts -comment -string, L:source.tsx -comment -string", "injections": { "L:source": { @@ -19,7 +14,7 @@ "patterns": [ { "contentName": "meta.embedded.block.html", - "begin": "(?x)(\\s*?(\\w+\\.)?(?:html|\/\\*\\s*html\\s*\\*\/)\\s*)(`)", + "begin": "(?x)(\\s*?(\\w+\\.)?(?:html|/\\*\\s*html\\s*\\*/)\\s*)(`)", "beginCaptures": { "0": { "name": "string.template.ts, punctuation.definition.string.template.begin.ts" @@ -48,4 +43,4 @@ } ], "scopeName": "es6.inline.html" -} \ No newline at end of file +} diff --git a/syntaxes/es6.inline.less.json b/syntaxes/es6.inline.less.json index 8c41997..d06d604 100644 --- a/syntaxes/es6.inline.less.json +++ b/syntaxes/es6.inline.less.json @@ -1,15 +1,10 @@ { - "fileTypes": [ - "js", - "jsx", - "ts", - "tsx" - ], + "fileTypes": ["js", "jsx", "ts", "tsx"], "injectionSelector": "L:source.js -comment -string, L:source.jsx -comment -string, L:source.ts -comment -string, L:source.tsx -comment -string", "patterns": [ { "contentName": "meta.embedded.block.css", - "begin": "(?x)(\\s*?(\\w+\\.)?(?:\/\\*\\s*less\\s*\\*\/)\\s*)(`)", + "begin": "(?x)(\\s*?(\\w+\\.)?(?:less|/\\*\\s*less\\s*\\*/)\\s*)(`)", "beginCaptures": { "0": { "name": "string.template.ts, punctuation.definition.string.template.begin.ts" @@ -38,4 +33,4 @@ } ], "scopeName": "es6.inline.less" -} \ No newline at end of file +} diff --git a/syntaxes/es6.inline.scss.json b/syntaxes/es6.inline.scss.json index 55591da..72fdc54 100644 --- a/syntaxes/es6.inline.scss.json +++ b/syntaxes/es6.inline.scss.json @@ -1,15 +1,10 @@ { - "fileTypes": [ - "js", - "jsx", - "ts", - "tsx" - ], + "fileTypes": ["js", "jsx", "ts", "tsx"], "injectionSelector": "L:source.js -comment -string, L:source.jsx -comment -string, L:source.ts -comment -string, L:source.tsx -comment -string", "patterns": [ { "contentName": "meta.embedded.block.css", - "begin": "(?x)(\\s*?(\\w+\\.)?(?:\/\\*\\s*scss\\s*\\*\/)\\s*)(`)", + "begin": "(?x)(\\s*?(\\w+\\.)?(?:scss|/\\*\\s*scss\\s*\\*/)\\s*)(`)", "beginCaptures": { "0": { "name": "string.template.ts, punctuation.definition.string.template.begin.ts" @@ -38,4 +33,4 @@ } ], "scopeName": "es6.inline.scss" -} \ No newline at end of file +}