Integrate clang-format into JS lint steps
This commit is contained in:
4
.github/actions/clang-format/action.yml
vendored
4
.github/actions/clang-format/action.yml
vendored
@@ -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}
|
||||||
|
5
.github/workflows/validate-cpp.yml
vendored
5
.github/workflows/validate-cpp.yml
vendored
@@ -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
|
|
||||||
|
@@ -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",
|
||||||
|
@@ -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",
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
@@ -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",
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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==
|
||||||
|
Reference in New Issue
Block a user