Integrate clang-format into JS lint steps

This commit is contained in:
Nick Gerleman
2022-12-24 23:05:04 -08:00
parent 466333ed14
commit a14e422961
7 changed files with 121 additions and 62 deletions

View File

@@ -19,6 +19,6 @@ runs:
working-directory: ${{ inputs.directory }} working-directory: ${{ inputs.directory }}
shell: bash shell: bash
run: | run: |
shopt -s globstar shopt -s extglob
shopt -s nullglob shopt -s nullglob
clang-format-${{ inputs.version }} --dry-run --Werror **/*.cpp **/*.cc **/*.h **/*.hh **/*.m **/*.mm clang-format-${{ inputs.version }} --dry-run --Werror **/*.{h,hh,hpp,c,cpp,cc,m,mm}

View File

@@ -19,8 +19,3 @@ jobs:
uses: ./.github/actions/clang-format uses: ./.github/actions/clang-format
with: with:
directory: ./yoga directory: ./yoga
- name: clang-format (JavaScript Bindings)
uses: ./.github/actions/clang-format
with:
directory: ./javascript

View File

@@ -8,7 +8,7 @@
*/ */
module.exports = { module.exports = {
ignorePatterns: ["dist/**"], ignorePatterns: ["dist/**", "**/*.d.ts"],
parser: "@babel/eslint-parser", parser: "@babel/eslint-parser",
extends: [ extends: [
"eslint:recommended", "eslint:recommended",

View File

@@ -8,82 +8,58 @@
*/ */
const { const {
argv,
copyTask, copyTask,
eslintTask,
logger,
jestTask, jestTask,
option,
parallel, parallel,
series, series,
spawn, spawn,
task, task,
} = require("just-scripts"); } = require("just-scripts");
const glob = require("glob"); const glob = require("glob");
const which = require("which"); const which = require("which");
const cmake = which.sync("cmake"); const node = process.execPath;
const emcmake = which.sync("emcmake");
const ninja = which.sync("ninja", { nothrow: true });
const node = which.sync("node");
const npx = which.sync("npx");
task("copy-dts", copyTask({ paths: ["./src_js/**/*.d.ts"], dest: "./dist" })); option("fix");
task("babel", () => task(
spawn(npx, ["babel", "src_js", "--source-maps", "--out-dir", "dist"]) "prepare-for-build",
parallel(
babelTransformTask({ paths: ["src_js"], dest: "dist" }),
copyTask({ paths: ["src_js/**/*.d.ts"], dest: "dist" }),
emcmakeGenerateTask()
)
); );
task("cmake-generate", () => function defineFlavor(flavor, env) {
spawn(emcmake, [
"cmake",
"-S",
".",
"-B",
"build",
...(ninja ? ["-G", "Ninja"] : []),
])
);
function prepareTask() {
return parallel("cmake-generate", "copy-dts", "babel");
}
function runBenchTask() {
const files = glob.sync("./tests/Benchmarks/**/*.js");
return () =>
spawn(node, ["./tests/run-bench.js", ...files], { stdio: "inherit" });
}
function cmakeBuildTask(targets) {
return () =>
spawn(
cmake,
["--build", "build", ...(targets ? ["--target", ...targets] : [])],
{ stdio: "inherit" }
);
}
function buildFlavor(flavor, env) {
task(`cmake-build:${flavor}`, cmakeBuildTask([flavor])); task(`cmake-build:${flavor}`, cmakeBuildTask([flavor]));
task(`jest:${flavor}`, jestTask({ env })); task(`jest:${flavor}`, jestTask({ env }));
task( task(
`test:${flavor}`, `test:${flavor}`,
series(prepareTask(), `cmake-build:${flavor}`, `jest:${flavor}`) series("prepare-for-build", `cmake-build:${flavor}`, `jest:${flavor}`)
); );
} }
buildFlavor("asmjs-async", { WASM: 0, SYNC: 0 }); defineFlavor("asmjs-async", { WASM: 0, SYNC: 0 });
buildFlavor("asmjs-sync", { WASM: 0, SYNC: 1 }); defineFlavor("asmjs-sync", { WASM: 0, SYNC: 1 });
buildFlavor("wasm-async", { WASM: 1, SYNC: 0 }); defineFlavor("wasm-async", { WASM: 1, SYNC: 0 });
buildFlavor("wasm-sync", { WASM: 1, SYNC: 1 }); defineFlavor("wasm-sync", { WASM: 1, SYNC: 1 });
task("cmake-build:all", cmakeBuildTask()); task("cmake-build:all", cmakeBuildTask());
task("cmake-build:async", cmakeBuildTask(["asmjs-async", "wasm-async"])); task("cmake-build:async", cmakeBuildTask(["asmjs-async", "wasm-async"]));
task("cmake-build:sync", cmakeBuildTask(["asmjs-sync", "wasm-sync"])); task("cmake-build:sync", cmakeBuildTask(["asmjs-sync", "wasm-sync"]));
task("build", series(prepareTask(), "cmake-build:all")); task("build", series("prepare-for-build", "cmake-build:all"));
task( task(
"test", "test",
series( series(
prepareTask(), "prepare-for-build",
series("cmake-build:asmjs-async", "jest:asmjs-async"), series("cmake-build:asmjs-async", "jest:asmjs-async"),
series("cmake-build:asmjs-sync", "jest:asmjs-sync"), series("cmake-build:asmjs-sync", "jest:asmjs-sync"),
series("cmake-build:wasm-async", "jest:wasm-async"), series("cmake-build:wasm-async", "jest:wasm-async"),
@@ -91,4 +67,77 @@ task(
) )
); );
task("benchmark", series(prepareTask(), "cmake-build:sync", runBenchTask())); task(
"benchmark",
series("prepare-for-build", "cmake-build:sync", runBenchTask())
);
task(
"lint",
series(eslintTask({ fix: argv().fix }), clangFormatTask({ fix: argv().fix }))
);
function babelTransformTask(opts) {
return () => {
const args = [...opts.paths, "--source-maps", "--out-dir", opts.dest];
logger.info(`Transforming [${opts.paths.join(",")}] to '${opts.dest}'`);
return spawn(node, [require.resolve("@babel/cli/bin/babel"), ...args]);
};
}
function runBenchTask() {
return () => {
const files = glob.sync("./tests/Benchmarks/**/*.js");
const args = ["./tests/run-bench.js", ...files];
logger.info(args.join(" "));
return spawn(node, args, { stdio: "inherit" });
};
}
function emcmakeGenerateTask() {
return () => {
const emcmake = which.sync("emcmake");
const ninja = which.sync("ninja", { nothrow: true });
const args = [
"cmake",
"-S",
".",
"-B",
"build",
...(ninja ? ["-G", "Ninja"] : []),
];
logger.info(["encmake", ...args].join(" "));
return spawn(emcmake, args);
};
}
function cmakeBuildTask(targets) {
return () => {
const cmake = which.sync("cmake");
const args = [
"--build",
"build",
...(targets ? ["--target", ...targets] : []),
];
logger.info(["cmake", ...args].join(" "));
return spawn(cmake, args, { stdio: "inherit" });
};
}
function clangFormatTask(opts) {
return () => {
const args = [
...(opts.fix ? ["-i"] : ["--dry-run", "--Werror"]),
...glob.sync("**/*.{h,hh,hpp,c,cpp,cc,m,mm}"),
];
logger.info(["clang-format", ...args].join(" "));
return spawn(node, [require.resolve("clang-format"), ...args], {
stdio: "inherit",
});
};
}

View File

@@ -28,8 +28,8 @@
"scripts": { "scripts": {
"benchmark": "just benchmark", "benchmark": "just benchmark",
"build": "just build", "build": "just build",
"lint": "eslint .", "lint": "just lint",
"lint:fix": "yarn lint --fix", "lint:fix": "just lint --fix",
"test": "just test", "test": "just test",
"test:asmjs-async": "just test:asmjs-async", "test:asmjs-async": "just test:asmjs-async",
"test:asmjs-sync": "just test:asmjs-sync", "test:asmjs-sync": "just test:asmjs-sync",
@@ -41,6 +41,7 @@
"@babel/core": "^7.20.7", "@babel/core": "^7.20.7",
"@babel/eslint-parser": "^7.19.1", "@babel/eslint-parser": "^7.19.1",
"@babel/preset-env": "^7.20.2", "@babel/preset-env": "^7.20.2",
"clang-format": "^1.8.0",
"eslint": "^8.30.0", "eslint": "^8.30.0",
"eslint-config-prettier": "^8.5.0", "eslint-config-prettier": "^8.5.0",
"eslint-plugin-jest": "^27.1.7", "eslint-plugin-jest": "^27.1.7",

View File

@@ -32,11 +32,11 @@ EMSCRIPTEN_BINDINGS(YOGA_LAYOUT) {
"setExperimentalFeatureEnabled", "setExperimentalFeatureEnabled",
&Config::setExperimentalFeatureEnabled) &Config::setExperimentalFeatureEnabled)
.function("setPointScaleFactor", &Config::setPointScaleFactor) .function("setPointScaleFactor", &Config::setPointScaleFactor)
.function("setUseLegacyStretchBehaviour", &Config::setUseLegacyStretchBehaviour) .function(
"setUseLegacyStretchBehaviour", &Config::setUseLegacyStretchBehaviour)
.function("setUseWebDefaults", &Config::setUseWebDefaults) .function("setUseWebDefaults", &Config::setUseWebDefaults)
.function( .function(
"isExperimentalFeatureEnabled", "isExperimentalFeatureEnabled", &Config::isExperimentalFeatureEnabled)
&Config::isExperimentalFeatureEnabled)
.function("useLegacyStretchBehaviour", &Config::useLegacyStretchBehaviour) .function("useLegacyStretchBehaviour", &Config::useLegacyStretchBehaviour)
.function("useWebDefaults", &Config::useWebDefaults); .function("useWebDefaults", &Config::useWebDefaults);

View File

@@ -1628,6 +1628,11 @@ async-settle@^2.0.0:
dependencies: dependencies:
async-done "^2.0.0" async-done "^2.0.0"
async@^3.2.3:
version "3.2.4"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
babel-jest@^29.3.1: babel-jest@^29.3.1:
version "29.3.1" version "29.3.1"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.3.1.tgz#05c83e0d128cd48c453eea851482a38782249f44" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.3.1.tgz#05c83e0d128cd48c453eea851482a38782249f44"
@@ -1870,6 +1875,15 @@ cjs-module-lexer@^1.0.0:
resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
clang-format@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/clang-format/-/clang-format-1.8.0.tgz#7779df1c5ce1bc8aac1b0b02b4e479191ef21d46"
integrity sha512-pK8gzfu55/lHzIpQ1givIbWfn3eXnU7SfxqIwVgnn5jEM6j4ZJYjpFqFs4iSBPNedzRMmfjYjuQhu657WAXHXw==
dependencies:
async "^3.2.3"
glob "^7.0.0"
resolve "^1.1.6"
cli-table3@^0.6.0: cli-table3@^0.6.0:
version "0.6.3" version "0.6.3"
resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2"
@@ -2506,7 +2520,7 @@ glob-parent@^6.0.2:
dependencies: dependencies:
is-glob "^4.0.3" is-glob "^4.0.3"
glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0:
version "7.2.3" version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -3798,7 +3812,7 @@ resolve.exports@^1.1.0:
resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9"
integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==
resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0: resolve@^1.1.6, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0:
version "1.22.1" version "1.22.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==