diff --git a/package-lock.json b/package-lock.json index 1d5ff64..95f3ea3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,11 @@ "integrity": "sha512-8xZEYckCbUVgK8Eg7lf5Iy4COKJ5uXlnIOnePN0WUwSQggy9tolM+tDJf7wMOnT/JT/W9xDYIaYggt3mRV2O5w==", "dev": true }, + "@types/prettier": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.15.1.tgz", + "integrity": "sha512-e8gYOt6EQQXlpoUGn3KDU9I9/ao/Layl92WgcPRxYYLw2TsuVkRGu5D/5viVPl1IL3nd/4oXw7bL/3MRh2MM1g==" + }, "ajv": { "version": "6.5.5", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", diff --git a/package.json b/package.json index 738ff41..fd70eb5 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "watch": "tsc -watch -p ./" }, "dependencies": { + "@types/prettier": "^1.15.1", "prettier": "^1.15.2" }, "devDependencies": { diff --git a/src/scssFormatterProvider.ts b/src/scssFormatterProvider.ts index 578779e..f1040fa 100644 --- a/src/scssFormatterProvider.ts +++ b/src/scssFormatterProvider.ts @@ -1,24 +1,27 @@ +import { + BuiltInParserName, + format, + Options as PrettierOptions +} from 'prettier'; import { DocumentFormattingEditProvider, Position, Range, TextDocument, TextEdit, workspace, WorkspaceConfiguration } from 'vscode'; -const prettier = require('prettier'); - import { safeExecution } from './errorHandler'; -async function format(document: TextDocument): Promise { +async function formatDocument(document: TextDocument): Promise { const workspaceConfiguration: WorkspaceConfiguration = workspace.getConfiguration('scssFormatter'); const rawDocumentText = document.getText(); const { fileName, languageId } = document; - const options = { + const options: PrettierOptions = { ...Object.assign({}, workspaceConfiguration), - parser: languageId + parser: languageId as BuiltInParserName }; return safeExecution( - () => prettier.format(rawDocumentText, options), + () => format(rawDocumentText, options), rawDocumentText, fileName ); @@ -33,7 +36,7 @@ function fullDocumentRange(document: TextDocument): Range { export class SCSSFormatter implements DocumentFormattingEditProvider { public async provideDocumentFormattingEdits(document: TextDocument): Promise { - const formattedDocument = await format(document); + const formattedDocument = await formatDocument(document); return [TextEdit.replace(fullDocumentRange(document), formattedDocument)]; } } diff --git a/src/test/extension.test.ts b/src/test/extension.test.ts index c983fc8..72cb10d 100644 --- a/src/test/extension.test.ts +++ b/src/test/extension.test.ts @@ -1,10 +1,9 @@ /* tslint:disable: no-console */ import * as assert from 'assert'; import * as path from 'path'; +import { format } from 'prettier'; import { commands, Uri, window, workspace } from 'vscode'; -const prettier = require('prettier'); - // activate the formatter async function activateFormatter() { await commands.executeCommand('scss-formatter.activate'); @@ -25,7 +24,7 @@ async function clearOutput() { * @param base base URI * @returns source code and resulting code */ -async function format( +async function formatWithVscode( file: string, base: Uri = workspace.workspaceFolders![0].uri ): Promise<{ @@ -53,9 +52,9 @@ async function format( * @param file path relative to workspace root */ async function formatSameAsPrettier(file: string) { - const result = await format(file); + const result = await formatWithVscode(file); if (result) { - const prettierFormatted = prettier.format(result.source, { + const prettierFormatted = format(result.source, { filepath: file, }); assert.equal(result.result, prettierFormatted); diff --git a/src/utils.ts b/src/utils.ts index 7bde40a..9800b7c 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,3 +1,4 @@ +import { BuiltInParserName } from 'prettier'; import { DocumentSelector, extensions } from 'vscode'; /** @@ -12,7 +13,7 @@ function getExtensionVersion(): string | null { } /** languages supported by scss formatter */ -const supportedLanguages: string[] = [ +const supportedLanguages: BuiltInParserName[] = [ 'css', 'scss' ]; diff --git a/tsconfig.json b/tsconfig.json index 41bea26..3a284d9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "target": "es6", "outDir": "out", "lib": [ - "es6" + "es2016" ], "sourceMap": true, "rootDir": "src",