deno.land / x / deno@v1.28.2 / tools / lint.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160#!/usr/bin/env -S deno run --unstable --allow-write --allow-read --allow-run// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.import { buildMode, getPrebuiltToolPath, getSources, join, ROOT_PATH,} from "./util.js";
async function dlint() { const configFile = join(ROOT_PATH, ".dlint.json"); const execPath = getPrebuiltToolPath("dlint"); console.log("dlint");
const sourceFiles = await getSources(ROOT_PATH, [ "*.js", "*.ts", ":!:.github/mtime_cache/action.js", ":!:cli/tests/testdata/swc_syntax_error.ts", ":!:cli/tests/testdata/error_008_checkjs.js", ":!:cli/bench/http/node*.js", ":!:cli/bench/testdata/npm/*", ":!:cli/bench/testdata/express-router.js", ":!:cli/bench/testdata/react-dom.js", ":!:cli/compilers/wasm_wrap.js", ":!:cli/dts/**", ":!:cli/tests/testdata/encoding/**", ":!:cli/tests/testdata/error_syntax.js", ":!:cli/tests/testdata/fmt/**", ":!:cli/tests/testdata/npm/**", ":!:cli/tests/testdata/lint/**", ":!:cli/tests/testdata/run/**", ":!:cli/tests/testdata/tsc/**", ":!:cli/tsc/*typescript.js", ":!:cli/tsc/compiler.d.ts", ":!:test_util/wpt/**", ]);
if (!sourceFiles.length) { return; }
const chunks = splitToChunks(sourceFiles, `${execPath} run`.length); for (const chunk of chunks) { const { success } = await Deno.spawn(execPath, { args: ["run", "--config=" + configFile, ...chunk], stdout: "inherit", stderr: "inherit", }); if (!success) { throw new Error("dlint failed"); } }}
// `prefer-primordials` has to apply only to files related to bootstrapping,// which is different from other lint rules. This is why this dedicated function// is needed.async function dlintPreferPrimordials() { const execPath = getPrebuiltToolPath("dlint"); console.log("prefer-primordials");
const sourceFiles = await getSources(ROOT_PATH, [ "runtime/**/*.js", "ext/**/*.js", "core/**/*.js", ":!:core/examples/**", ]);
if (!sourceFiles.length) { return; }
const chunks = splitToChunks(sourceFiles, `${execPath} run`.length); for (const chunk of chunks) { const { success } = await Deno.spawn(execPath, { args: ["run", "--rule", "prefer-primordials", ...chunk], stdout: "inherit", stderr: "inherit", }); if (!success) { throw new Error("prefer-primordials failed"); } }}
function splitToChunks(paths, initCmdLen) { let cmdLen = initCmdLen; const MAX_COMMAND_LEN = 30000; const chunks = [[]]; for (const p of paths) { if (cmdLen + p.length > MAX_COMMAND_LEN) { chunks.push([p]); cmdLen = initCmdLen; } else { chunks[chunks.length - 1].push(p); cmdLen += p.length; } } return chunks;}
async function clippy() { console.log("clippy");
const currentBuildMode = buildMode(); const cmd = ["clippy", "--all-targets", "--locked"];
if (currentBuildMode != "debug") { cmd.push("--release"); }
const { success } = await Deno.spawn("cargo", { args: [ ...cmd, "--", "-D", "warnings", "-A", // https://github.com/rust-lang/rust-clippy/issues/407 "clippy::extra_unused_lifetimes", "-A", // https://github.com/rust-lang/rust-clippy/issues/7271 // False positives in core/resources.rs for lifetime elision. "clippy::needless_lifetimes", ], stdout: "inherit", stderr: "inherit", }); if (!success) { throw new Error("clippy failed"); }}
async function main() { await Deno.chdir(ROOT_PATH);
let didLint = false;
if (Deno.args.includes("--js")) { await dlint(); await dlintPreferPrimordials(); didLint = true; }
if (Deno.args.includes("--rs")) { await clippy(); didLint = true; }
if (!didLint) { await dlint(); await dlintPreferPrimordials(); await clippy(); }}
await main();
Version Info