From 62e2d9ad55b560e0060b0ca25624ba9fd72ffd43 Mon Sep 17 00:00:00 2001 From: worksofliam Date: Fri, 10 Nov 2023 12:53:02 -0500 Subject: [PATCH] Add new format provider --- src/database/statement.ts | 5 +++-- src/language/index.ts | 4 +++- src/language/providers/formatProvider.ts | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 src/language/providers/formatProvider.ts diff --git a/src/database/statement.ts b/src/database/statement.ts index f57fc568..301a68af 100644 --- a/src/database/statement.ts +++ b/src/database/statement.ts @@ -2,12 +2,13 @@ import { getInstance } from "../base"; import Configuration from "../configuration"; -import {format, KeywordCase} from "sql-formatter" +import {format, FormatOptionsWithLanguage, KeywordCase} from "sql-formatter" export default class Statement { - static format(sql: string) { + static format(sql: string, options: FormatOptionsWithLanguage = {}) { const keywordCase: KeywordCase = (Configuration.get(`sqlFormat.keywordCase`) || `lower`); return format(sql, { + ...options, language: `db2i`, // Defaults to "sql" (see the above list of supported dialects) linesBetweenQueries: 2, // Defaults to 1 keywordCase: keywordCase diff --git a/src/language/index.ts b/src/language/index.ts index 46aa4c5c..bebeab42 100644 --- a/src/language/index.ts +++ b/src/language/index.ts @@ -1,10 +1,12 @@ import { completionProvider } from "./providers/completionProvider"; +import { formatProvider } from "./providers/formatProvider"; export function languageInit() { let functionality = []; functionality.push( - completionProvider + completionProvider, + formatProvider ); return functionality; diff --git a/src/language/providers/formatProvider.ts b/src/language/providers/formatProvider.ts new file mode 100644 index 00000000..8741cdb3 --- /dev/null +++ b/src/language/providers/formatProvider.ts @@ -0,0 +1,19 @@ +import { Position, Range, TextEdit, languages } from "vscode"; +import Statement from "../../database/statement"; + +export const formatProvider = languages.registerDocumentFormattingEditProvider({language: `sql`}, { + async provideDocumentFormattingEdits(document, options, token) { + const formatted = Statement.format( + document.getText(), + { + useTabs: !options.insertSpaces, + tabWidth: options.tabSize, + } + ); + + return [new TextEdit( + new Range(0, 0, Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER), + formatted + )]; + } +}) \ No newline at end of file