Skip to content

Commit

Permalink
Merge pull request #166 from codefori/feature/format_documebnt
Browse files Browse the repository at this point in the history
Add new format provider
  • Loading branch information
worksofliam authored Nov 10, 2023
2 parents 87f9258 + 62e2d9a commit 5f03749
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
5 changes: 3 additions & 2 deletions src/database/statement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 = <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
Expand Down
4 changes: 3 additions & 1 deletion src/language/index.ts
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
19 changes: 19 additions & 0 deletions src/language/providers/formatProvider.ts
Original file line number Diff line number Diff line change
@@ -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
)];
}
})

0 comments on commit 5f03749

Please sign in to comment.