mirror of
https://github.com/cool-team-official/cool-admin-vue.git
synced 2025-12-11 13:02:49 +00:00
66 lines
1.4 KiB
TypeScript
66 lines
1.4 KiB
TypeScript
import { languages } from "monaco-editor";
|
|
import prettier from "prettier/standalone";
|
|
import pluginHtml from "prettier/plugins/html";
|
|
import pluginTypescript from "prettier/plugins/typescript";
|
|
import pluginPostcss from "prettier/plugins/postcss";
|
|
import pluginEstree from "prettier/plugins/estree";
|
|
|
|
const options: { [key: string]: { parser: string; plugins: any[] } } = {
|
|
html: {
|
|
parser: "html",
|
|
plugins: [pluginHtml, pluginTypescript, pluginPostcss, pluginEstree]
|
|
},
|
|
typescript: {
|
|
parser: "typescript",
|
|
plugins: [pluginTypescript, pluginEstree]
|
|
},
|
|
css: {
|
|
parser: "css",
|
|
plugins: [pluginPostcss]
|
|
},
|
|
scss: {
|
|
parser: "scss",
|
|
plugins: [pluginPostcss]
|
|
}
|
|
};
|
|
|
|
export function useFormat() {
|
|
function register() {
|
|
for (const i in options) {
|
|
languages.registerDocumentFormattingEditProvider(i, {
|
|
async provideDocumentFormattingEdits(model) {
|
|
let text = model.getValue();
|
|
|
|
const parser = options[i].parser;
|
|
|
|
try {
|
|
text = await prettier.format(text, {
|
|
parser,
|
|
plugins: options[i].plugins,
|
|
semi: true,
|
|
printWidth: 100,
|
|
tabWidth: parser == "html" ? 4 : 2,
|
|
useTabs: parser == "html",
|
|
singleQuote: true,
|
|
trailingComma: "none"
|
|
});
|
|
} catch (err) {
|
|
// ...
|
|
}
|
|
|
|
return [
|
|
{
|
|
range: model.getFullModelRange(),
|
|
text
|
|
}
|
|
];
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
return {
|
|
register
|
|
};
|
|
}
|