✨ Modified sql prettier plugin
This commit is contained in:
@@ -1,23 +1,31 @@
|
||||
/**
|
||||
* Prettier Plugin for C/C++ formatting using clang-format WebAssembly
|
||||
* Prettier Plugin for C/C++/C#/Java/Protobuf formatting using clang-format WebAssembly
|
||||
*
|
||||
* This plugin provides support for formatting C/C++ files using the clang-format WASM implementation.
|
||||
* It supports various C/C++ file extensions and common clang-format styles.
|
||||
* This plugin provides support for formatting multiple languages using the clang-format WASM implementation.
|
||||
* Supported languages:
|
||||
* - C / C++
|
||||
* - Objective-C / Objective-C++
|
||||
* - C#
|
||||
* - Java
|
||||
* - Protocol Buffer (Protobuf)
|
||||
*
|
||||
* It supports various file extensions and common clang-format styles.
|
||||
*/
|
||||
import type { Plugin, Parser, Printer } from 'prettier';
|
||||
|
||||
// Import the clang-format WASM module
|
||||
import clangFormatInit, { format } from './clang-format-vite.js';
|
||||
|
||||
const parserName = 'clang';
|
||||
const parserName = 'clang-format';
|
||||
|
||||
// Language configuration
|
||||
const languages = [
|
||||
{
|
||||
name: 'C',
|
||||
aliases: ['c'],
|
||||
parsers: [parserName],
|
||||
parsers: ['c'],
|
||||
extensions: ['.c', '.h'],
|
||||
filenames: ['*.c', '*.h'],
|
||||
aceMode: 'c_cpp',
|
||||
tmScope: 'source.c',
|
||||
linguistLanguageId: 50,
|
||||
@@ -26,8 +34,9 @@ const languages = [
|
||||
{
|
||||
name: 'C++',
|
||||
aliases: ['cpp', 'cxx', 'cc'],
|
||||
parsers: [parserName],
|
||||
parsers: ['cpp'],
|
||||
extensions: ['.cpp', '.cxx', '.cc', '.hpp', '.hxx', '.hh', '.C', '.H'],
|
||||
filenames: ['*.cpp', '*.cxx', '*.cc', '*.hpp', '*.hxx', '*.hh', '*.C', '*.H'],
|
||||
aceMode: 'c_cpp',
|
||||
tmScope: 'source.cpp',
|
||||
linguistLanguageId: 43,
|
||||
@@ -36,12 +45,57 @@ const languages = [
|
||||
{
|
||||
name: 'Objective-C',
|
||||
aliases: ['objc', 'objectivec'],
|
||||
parsers: [parserName],
|
||||
extensions: ['.m', '.mm'],
|
||||
parsers: ['objective-c'],
|
||||
extensions: ['.m'],
|
||||
filenames: ['*.m'],
|
||||
aceMode: 'objectivec',
|
||||
tmScope: 'source.objc',
|
||||
linguistLanguageId: 259,
|
||||
vscodeLanguageIds: ['objective-c']
|
||||
},
|
||||
{
|
||||
name: 'Objective-C++',
|
||||
aliases: ['objcpp', 'objectivecpp'],
|
||||
parsers: ['objective-cpp'],
|
||||
extensions: ['.mm'],
|
||||
filenames: ['*.mm'],
|
||||
aceMode: 'objectivec',
|
||||
tmScope: 'source.objcpp',
|
||||
linguistLanguageId: 260,
|
||||
vscodeLanguageIds: ['objective-cpp']
|
||||
},
|
||||
{
|
||||
name: 'C#',
|
||||
aliases: ['csharp', 'cs'],
|
||||
parsers: ['cs'],
|
||||
extensions: ['.cs'],
|
||||
filenames: ['*.cs'],
|
||||
aceMode: 'csharp',
|
||||
tmScope: 'source.cs',
|
||||
linguistLanguageId: 42,
|
||||
vscodeLanguageIds: ['csharp']
|
||||
},
|
||||
{
|
||||
name: 'Java',
|
||||
aliases: ['java'],
|
||||
parsers: ['java'],
|
||||
extensions: ['.java'],
|
||||
filenames: ['*.java'],
|
||||
aceMode: 'java',
|
||||
tmScope: 'source.java',
|
||||
linguistLanguageId: 181,
|
||||
vscodeLanguageIds: ['java']
|
||||
},
|
||||
{
|
||||
name: 'Protocol Buffer',
|
||||
aliases: ['protobuf', 'proto'],
|
||||
parsers: ['proto'],
|
||||
extensions: ['.proto'],
|
||||
filenames: ['*.proto'],
|
||||
aceMode: 'protobuf',
|
||||
tmScope: 'source.proto',
|
||||
linguistLanguageId: 297,
|
||||
vscodeLanguageIds: ['proto']
|
||||
}
|
||||
];
|
||||
|
||||
@@ -85,7 +139,7 @@ const clangPrinter: Printer<string> = {
|
||||
const style = getClangStyle(options);
|
||||
|
||||
// Format using clang-format (synchronous call)
|
||||
const formatted = format(text, undefined, style);
|
||||
const formatted = format(text, options.filename, style);
|
||||
|
||||
return formatted.trim();
|
||||
} catch (error) {
|
||||
@@ -129,6 +183,13 @@ const options = {
|
||||
{ value: 'Microsoft', description: "Microsoft's style guide" },
|
||||
{ value: 'GNU', description: 'GNU coding standards' }
|
||||
]
|
||||
},
|
||||
filename: {
|
||||
// since: '0.1.0',
|
||||
category: 'Config',
|
||||
type: 'string',
|
||||
default: undefined,
|
||||
description: 'Custom filename to use for web_fmt processing (affects language detection)',
|
||||
}
|
||||
};
|
||||
|
||||
@@ -141,7 +202,7 @@ const clangPlugin: Plugin = {
|
||||
printers: {
|
||||
[parserName]: clangPrinter,
|
||||
},
|
||||
options,
|
||||
...options,
|
||||
};
|
||||
|
||||
// Initialize WASM module when plugin loads
|
||||
|
||||
44
frontend/src/common/prettier/plugins/clang/scripts/build.sh
Normal file
44
frontend/src/common/prettier/plugins/clang/scripts/build.sh
Normal file
@@ -0,0 +1,44 @@
|
||||
set -Eeo pipefail
|
||||
|
||||
cd $(dirname $0)/..
|
||||
project_root=$(pwd)
|
||||
|
||||
rm -rf pkg
|
||||
mkdir -p pkg build
|
||||
cd build
|
||||
|
||||
export CC=$(which clang)
|
||||
export CXX=$(which clang++)
|
||||
|
||||
emcmake cmake -G Ninja ..
|
||||
ninja clang-format-wasm
|
||||
|
||||
cd $project_root
|
||||
|
||||
if [[ ! -z "${WASM_OPT}" ]]; then
|
||||
wasm-opt -Os build/clang-format-esm.wasm -o build/clang-format-esm-Os.wasm
|
||||
wasm-opt -Oz build/clang-format-esm.wasm -o build/clang-format-esm-Oz.wasm
|
||||
fi
|
||||
|
||||
SMALLEST_WASM=$(ls -Sr build/clang-format-e*.wasm | head -1)
|
||||
|
||||
cp $SMALLEST_WASM pkg/clang-format.wasm
|
||||
cat src/template.js build/clang-format-esm.js >pkg/clang-format.js
|
||||
|
||||
# add shebang
|
||||
echo '#!/usr/bin/env node' | cat - ./build/clang-format-cli.js >./pkg/clang-format-cli.cjs
|
||||
cp ./build/clang-format-cli.wasm ./pkg/
|
||||
|
||||
cp ./src/clang-format.d.ts src/clang-format-*.js ./pkg/
|
||||
cp ./package.json LICENSE README.md .npmignore ./pkg/
|
||||
|
||||
# copy git-clang-format and clang-format-diff.py
|
||||
cp ./build/_deps/llvm_project-src/clang/tools/clang-format/git-clang-format ./pkg/
|
||||
cp ./build/_deps/llvm_project-src/clang/tools/clang-format/clang-format-diff.py ./pkg/
|
||||
|
||||
ls -lh ./pkg
|
||||
|
||||
./scripts/package.mjs ./package.json
|
||||
|
||||
# make sure repo is clean
|
||||
# git diff --exit-code
|
||||
95
frontend/src/common/prettier/plugins/clang/scripts/cli.patch
Normal file
95
frontend/src/common/prettier/plugins/clang/scripts/cli.patch
Normal file
@@ -0,0 +1,95 @@
|
||||
diff --git a/src/cli.cc b/src/cli.cc
|
||||
index 2861005..69ec009 100644
|
||||
--- a/src/cli.cc
|
||||
+++ b/src/cli.cc
|
||||
@@ -12,7 +12,7 @@
|
||||
///
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
-#include "../../lib/Format/MatchFilePath.h"
|
||||
+#include "clang/../../lib/Format/MatchFilePath.h"
|
||||
#include "clang/Basic/Diagnostic.h"
|
||||
#include "clang/Basic/DiagnosticOptions.h"
|
||||
#include "clang/Basic/FileManager.h"
|
||||
@@ -27,6 +27,8 @@
|
||||
#include "llvm/Support/Process.h"
|
||||
#include <fstream>
|
||||
|
||||
+#include "CustomFileSystem.h"
|
||||
+
|
||||
using namespace llvm;
|
||||
using clang::tooling::Replacements;
|
||||
|
||||
@@ -448,9 +450,12 @@ static bool format(StringRef FileName, bool ErrorOnIncompleteFormat = false) {
|
||||
return true;
|
||||
}
|
||||
|
||||
+ auto RealFS = vfs::getRealFileSystem();
|
||||
+ auto CustomFS = new vfs::CustomFileSystem(RealFS);
|
||||
+ IntrusiveRefCntPtr<vfs::FileSystem> CustomFSPtr(CustomFS);
|
||||
Expected<FormatStyle> FormatStyle =
|
||||
getStyle(Style, AssumedFileName, FallbackStyle, Code->getBuffer(),
|
||||
- nullptr, WNoErrorList.isSet(WNoError::Unknown));
|
||||
+ CustomFSPtr.get(), WNoErrorList.isSet(WNoError::Unknown));
|
||||
if (!FormatStyle) {
|
||||
llvm::errs() << toString(FormatStyle.takeError()) << "\n";
|
||||
return true;
|
||||
@@ -571,10 +576,15 @@ static int dumpConfig() {
|
||||
}
|
||||
Code = std::move(CodeOrErr.get());
|
||||
}
|
||||
+
|
||||
+ auto RealFS = vfs::getRealFileSystem();
|
||||
+ auto CustomFS = new vfs::CustomFileSystem(RealFS);
|
||||
+ IntrusiveRefCntPtr<vfs::FileSystem> CustomFSPtr(CustomFS);
|
||||
+
|
||||
Expected<clang::format::FormatStyle> FormatStyle = clang::format::getStyle(
|
||||
Style,
|
||||
FileNames.empty() || FileNames[0] == "-" ? AssumeFileName : FileNames[0],
|
||||
- FallbackStyle, Code ? Code->getBuffer() : "");
|
||||
+ FallbackStyle, Code ? Code->getBuffer() : "", CustomFSPtr.get());
|
||||
if (!FormatStyle) {
|
||||
llvm::errs() << toString(FormatStyle.takeError()) << "\n";
|
||||
return 1;
|
||||
@@ -607,24 +617,26 @@ static bool isIgnored(StringRef FilePath) {
|
||||
String Path;
|
||||
String AbsPath{FilePath};
|
||||
|
||||
+ auto PathStyle = vfs::getPathStyle();
|
||||
+
|
||||
using namespace llvm::sys::path;
|
||||
- make_absolute(AbsPath);
|
||||
- remove_dots(AbsPath, /*remove_dot_dot=*/true);
|
||||
+ vfs::make_absolute(AbsPath);
|
||||
+ remove_dots(AbsPath, /*remove_dot_dot=*/true, PathStyle);
|
||||
|
||||
- if (StringRef Dir{parent_path(AbsPath)}; PrevDir != Dir) {
|
||||
+ if (StringRef Dir{parent_path(AbsPath, PathStyle)}; PrevDir != Dir) {
|
||||
PrevDir = Dir;
|
||||
|
||||
for (;;) {
|
||||
Path = Dir;
|
||||
- append(Path, ".clang-format-ignore");
|
||||
+ append(Path, PathStyle, ".clang-format-ignore");
|
||||
if (is_regular_file(Path))
|
||||
break;
|
||||
- Dir = parent_path(Dir);
|
||||
+ Dir = parent_path(Dir, PathStyle);
|
||||
if (Dir.empty())
|
||||
return false;
|
||||
}
|
||||
|
||||
- IgnoreDir = convert_to_slash(Dir);
|
||||
+ IgnoreDir = convert_to_slash(Dir, PathStyle);
|
||||
|
||||
std::ifstream IgnoreFile{Path.c_str()};
|
||||
if (!IgnoreFile.good())
|
||||
@@ -644,7 +656,7 @@ static bool isIgnored(StringRef FilePath) {
|
||||
if (IgnoreDir.empty())
|
||||
return false;
|
||||
|
||||
- const auto Pathname{convert_to_slash(AbsPath)};
|
||||
+ const auto Pathname{convert_to_slash(AbsPath, PathStyle)};
|
||||
for (const auto &Pat : Patterns) {
|
||||
const bool IsNegated = Pat[0] == '!';
|
||||
StringRef Pattern{Pat};
|
||||
@@ -0,0 +1,27 @@
|
||||
current_dir=$(pwd)
|
||||
tmp_dir=$(mktemp -d)
|
||||
|
||||
cd $tmp_dir
|
||||
|
||||
git init
|
||||
|
||||
cp $current_dir/build/_deps/llvm_project-src/clang/tools/clang-format/ClangFormat.cpp ./cli.cc
|
||||
|
||||
git add -f .
|
||||
git commit -m "init"
|
||||
|
||||
cp $current_dir/src/cli.cc ./cli.cc
|
||||
|
||||
git add -f .
|
||||
git diff \
|
||||
--cached \
|
||||
--no-color \
|
||||
--ignore-space-at-eol \
|
||||
--no-ext-diff \
|
||||
--src-prefix=a/src/ \
|
||||
--dst-prefix=b/src/ \
|
||||
>$current_dir/scripts/cli.patch || true
|
||||
|
||||
rm -rf $tmp_dir
|
||||
|
||||
|
||||
Reference in New Issue
Block a user