mirror of
https://github.com/denoland/deno.git
synced 2025-01-21 13:00:36 -05:00
tools/format.ts is making CI flaky and it's difficult to run right now.
Reverting to tools/format.py
This reverts commit f19622e768
.
This commit is contained in:
parent
9240f9b57f
commit
0b0d962eb9
21 changed files with 59 additions and 264 deletions
3
.prettierignore
Normal file
3
.prettierignore
Normal file
|
@ -0,0 +1,3 @@
|
|||
js/flatbuffers.js
|
||||
tests/error_syntax.js
|
||||
tests/badly_formatted.js
|
|
@ -70,8 +70,8 @@ before_script:
|
|||
# Default script for release builds.
|
||||
script:
|
||||
- ./tools/lint.py
|
||||
- ./tools/build.py -C target/release
|
||||
- ./tools/test_format.py
|
||||
- ./tools/build.py -C target/release
|
||||
- DENO_BUILD_MODE=release ./tools/test.py
|
||||
|
||||
jobs:
|
||||
|
|
|
@ -45,8 +45,6 @@ import "./url_search_params_test.ts";
|
|||
import "./write_file_test.ts";
|
||||
import "./performance_test.ts";
|
||||
|
||||
import "../tools/util_test.ts";
|
||||
|
||||
import "../website/app_test.js";
|
||||
|
||||
import "deps/https/deno.land/x/std/testing/main.ts";
|
||||
|
|
50
tools/format.py
Executable file
50
tools/format.py
Executable file
|
@ -0,0 +1,50 @@
|
|||
#!/usr/bin/env python
|
||||
# Copyright 2018 the Deno authors. All rights reserved. MIT license.
|
||||
from glob import glob
|
||||
import os
|
||||
import sys
|
||||
from third_party import fix_symlinks, google_env, python_env
|
||||
from third_party import clang_format_path, third_party_path
|
||||
from util import root_path, run, find_exts, platform
|
||||
|
||||
fix_symlinks()
|
||||
|
||||
prettier = os.path.join(third_party_path, "node_modules", "prettier",
|
||||
"bin-prettier.js")
|
||||
tools_path = os.path.join(root_path, "tools")
|
||||
rustfmt_config = os.path.join(root_path, ".rustfmt.toml")
|
||||
|
||||
os.chdir(root_path)
|
||||
|
||||
|
||||
def qrun(cmd, env=None):
|
||||
run(cmd, quiet=True, env=env)
|
||||
|
||||
|
||||
print "clang_format"
|
||||
qrun([clang_format_path, "-i", "-style", "Google"] +
|
||||
find_exts(["libdeno"], [".cc", ".h"]))
|
||||
|
||||
print "gn format"
|
||||
for fn in ["BUILD.gn", ".gn"] + find_exts(["build_extra", "libdeno"],
|
||||
[".gn", ".gni"]):
|
||||
qrun(["third_party/depot_tools/gn", "format", fn], env=google_env())
|
||||
|
||||
print "yapf"
|
||||
qrun(
|
||||
[sys.executable, "third_party/python_packages/bin/yapf", "-i"] + find_exts(
|
||||
["tools", "build_extra"], [".py"], skip=["tools/clang"]),
|
||||
env=python_env())
|
||||
|
||||
print "prettier"
|
||||
qrun(["node", prettier, "--write", "--loglevel=error"] + ["rollup.config.js"] +
|
||||
glob("*.json") + glob("*.md") +
|
||||
find_exts([".github", "js", "tests", "tools", "website"],
|
||||
[".js", ".json", ".ts", ".md"],
|
||||
skip=["tools/clang", "js/deps"]))
|
||||
|
||||
print "rustfmt"
|
||||
qrun([
|
||||
"third_party/rustfmt/" + platform() +
|
||||
"/rustfmt", "--config-path", rustfmt_config, "build.rs"
|
||||
] + find_exts(["src"], [".rs"]))
|
|
@ -1,86 +0,0 @@
|
|||
#!/usr/bin/env deno --allow-read --allow-run
|
||||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||
import { join } from "../js/deps/https/deno.land/x/std/fs/path.ts";
|
||||
import { findFiles, lookupDenoPath } from "./util.ts";
|
||||
|
||||
const clangFormat = join("third_party", "depot_tools", "clang-format");
|
||||
const gn = join("third_party", "depot_tools", "gn");
|
||||
const yapf = join("third_party", "python_packages", "bin", "yapf");
|
||||
const rustfmt = join("third_party", "rustfmt", Deno.platform.os, "rustfmt");
|
||||
const rustfmtConfig = ".rustfmt.toml";
|
||||
|
||||
const decoder = new TextDecoder();
|
||||
|
||||
async function run(...args: string[]): Promise<void> {
|
||||
if (Deno.platform.os === "win") {
|
||||
args = ["cmd.exe", "/c", ...args];
|
||||
}
|
||||
const p = Deno.run({ args, stdout: "piped", stderr: "piped" });
|
||||
const { code } = await p.status();
|
||||
if (code !== 0) {
|
||||
console.log(decoder.decode(await Deno.readAll(p.stderr)));
|
||||
console.log(decoder.decode(await Deno.readAll(p.stdout)));
|
||||
Deno.exit(code);
|
||||
}
|
||||
}
|
||||
|
||||
(async () => {
|
||||
console.log("clang_format");
|
||||
await run(
|
||||
clangFormat,
|
||||
"-i",
|
||||
"-style",
|
||||
"Google",
|
||||
...findFiles(["libdeno"], [".cc", ".h"])
|
||||
);
|
||||
|
||||
console.log("gn format");
|
||||
for (const fn of [
|
||||
"BUILD.gn",
|
||||
".gn",
|
||||
...findFiles(["build_extra", "libdeno"], [".gn", ".gni"])
|
||||
]) {
|
||||
await run(gn, "format", fn);
|
||||
}
|
||||
|
||||
console.log("yapf");
|
||||
await run(
|
||||
"python",
|
||||
yapf,
|
||||
"-i",
|
||||
...findFiles(["tools", "build_extra"], [".py"], {
|
||||
skip: [join("tools", "clang")]
|
||||
})
|
||||
);
|
||||
|
||||
console.log("prettier");
|
||||
await run(
|
||||
lookupDenoPath(),
|
||||
"--allow-read",
|
||||
"--allow-write",
|
||||
"js/deps/https/deno.land/x/std/prettier/main.ts",
|
||||
"rollup.config.js",
|
||||
...findFiles([".", "website"], [".json", ".md"], { depth: 1 }),
|
||||
...findFiles(
|
||||
[".github", "js", "tests", "tools", "website"],
|
||||
[".js", ".json", ".ts", ".md"],
|
||||
{
|
||||
skip: [
|
||||
join("tools", "clang"),
|
||||
join("js", "deps"),
|
||||
join("tests", "badly_formatted.js"),
|
||||
join("tests", "error_syntax.js")
|
||||
]
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
console.log("rustfmt");
|
||||
await run(
|
||||
rustfmt,
|
||||
"--config-path",
|
||||
rustfmtConfig,
|
||||
"build.rs",
|
||||
...findFiles(["src"], [".rs"])
|
||||
);
|
||||
})();
|
|
@ -1,40 +1,18 @@
|
|||
#!/usr/bin/env python
|
||||
# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||
# This program fails if ./tools/format.ts changes any files.
|
||||
# This program fails if ./tools/format.py changes any files.
|
||||
|
||||
import os
|
||||
import sys
|
||||
import util
|
||||
import sys
|
||||
import subprocess
|
||||
from distutils.spawn import find_executable
|
||||
|
||||
|
||||
def lookup_deno_path():
|
||||
deno_exe = "deno" + util.executable_suffix
|
||||
release_deno = os.path.join(util.root_path, "target", "release", deno_exe)
|
||||
debug_deno = os.path.join(util.root_path, "target", "debug", deno_exe)
|
||||
|
||||
if os.path.exists(release_deno):
|
||||
return release_deno
|
||||
if os.path.exists(debug_deno):
|
||||
return debug_deno
|
||||
|
||||
return find_executable("deno")
|
||||
|
||||
|
||||
def main():
|
||||
deno_path = lookup_deno_path()
|
||||
|
||||
if not deno_path:
|
||||
print "No available deno executable."
|
||||
sys.exit(1)
|
||||
|
||||
util.run([deno_path, "--allow-read", "--allow-run", "tools/format.ts"])
|
||||
util.run([sys.executable, "tools/format.py"])
|
||||
output = util.run_output(
|
||||
["git", "status", "-uno", "--porcelain", "--ignore-submodules"])
|
||||
if len(output) > 0:
|
||||
print "Run tools/format.ts "
|
||||
print "Run tools/format.py "
|
||||
print output
|
||||
sys.exit(1)
|
||||
|
||||
|
|
1
tools/testdata/find_files_testdata/bar.md
vendored
1
tools/testdata/find_files_testdata/bar.md
vendored
|
@ -1 +0,0 @@
|
|||
# bar
|
1
tools/testdata/find_files_testdata/bar.ts
vendored
1
tools/testdata/find_files_testdata/bar.ts
vendored
|
@ -1 +0,0 @@
|
|||
console.log("bar");
|
1
tools/testdata/find_files_testdata/bar.txt
vendored
1
tools/testdata/find_files_testdata/bar.txt
vendored
|
@ -1 +0,0 @@
|
|||
bar
|
1
tools/testdata/find_files_testdata/foo.md
vendored
1
tools/testdata/find_files_testdata/foo.md
vendored
|
@ -1 +0,0 @@
|
|||
# foo
|
1
tools/testdata/find_files_testdata/foo.ts
vendored
1
tools/testdata/find_files_testdata/foo.ts
vendored
|
@ -1 +0,0 @@
|
|||
console.log("foo");
|
1
tools/testdata/find_files_testdata/foo.txt
vendored
1
tools/testdata/find_files_testdata/foo.txt
vendored
|
@ -1 +0,0 @@
|
|||
foo
|
|
@ -1 +0,0 @@
|
|||
console.log("bar");
|
|
@ -1 +0,0 @@
|
|||
console.log("foo");
|
|
@ -1 +0,0 @@
|
|||
console.log("bar");
|
|
@ -1 +0,0 @@
|
|||
console.log("foo");
|
|
@ -1 +0,0 @@
|
|||
console.log("bar");
|
|
@ -1 +0,0 @@
|
|||
console.log("foo");
|
|
@ -1,72 +0,0 @@
|
|||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||
import { join } from "../js/deps/https/deno.land/x/std/fs/path/mod.ts";
|
||||
|
||||
const { platform, lstatSync, readDirSync } = Deno;
|
||||
|
||||
export interface FindOptions {
|
||||
skip?: string[];
|
||||
depth?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds files of the give extensions under the given paths recursively.
|
||||
* @param dirs directories
|
||||
* @param exts extensions
|
||||
* @param skip patterns to ignore
|
||||
* @param depth depth to find
|
||||
*/
|
||||
export function findFiles(
|
||||
dirs: string[],
|
||||
exts: string[],
|
||||
{ skip = [], depth = 20 }: FindOptions = {}
|
||||
) {
|
||||
return findFilesWalk(dirs, depth).filter(
|
||||
path =>
|
||||
exts.some(ext => path.endsWith(ext)) &&
|
||||
skip.every(pattern => !path.includes(pattern))
|
||||
);
|
||||
}
|
||||
|
||||
function findFilesWalk(paths: string[], depth: number) {
|
||||
if (depth < 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const foundPaths = paths.map(path =>
|
||||
lstatSync(path).isDirectory()
|
||||
? findFilesWalk(readDirSync(path).map(f => f.path), depth - 1)
|
||||
: path
|
||||
);
|
||||
|
||||
return [].concat(...foundPaths);
|
||||
}
|
||||
|
||||
export const executableSuffix = platform.os === "win" ? ".exe" : "";
|
||||
|
||||
/** Returns true if the path exists. */
|
||||
export function existsSync(path: string): boolean {
|
||||
try {
|
||||
lstatSync(path);
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks up the available deno path with the priority
|
||||
* of release -> debug -> global
|
||||
*/
|
||||
export function lookupDenoPath(): string {
|
||||
const denoExe = "deno" + executableSuffix;
|
||||
const releaseExe = join("target", "release", denoExe);
|
||||
const debugExe = join("target", "debug", denoExe);
|
||||
|
||||
if (existsSync(releaseExe)) {
|
||||
return releaseExe;
|
||||
} else if (existsSync(debugExe)) {
|
||||
return debugExe;
|
||||
}
|
||||
|
||||
return denoExe;
|
||||
}
|
|
@ -1,61 +0,0 @@
|
|||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||
import { assert, testPerm, assertEqual } from "../js/test_util.ts";
|
||||
import { findFiles } from "./util.ts";
|
||||
|
||||
const testDir = "tools/testdata/find_files_testdata";
|
||||
|
||||
// Sorts and replace backslashes with slashes.
|
||||
const normalize = files => files.map(f => f.replace(/\\/g, "/")).sort();
|
||||
|
||||
testPerm({ read: true }, function testFindFiles() {
|
||||
const files = findFiles([testDir], [".ts", ".md"]);
|
||||
assertEqual(normalize(files), [
|
||||
`${testDir}/bar.md`,
|
||||
`${testDir}/bar.ts`,
|
||||
`${testDir}/foo.md`,
|
||||
`${testDir}/foo.ts`,
|
||||
`${testDir}/subdir0/bar.ts`,
|
||||
`${testDir}/subdir0/foo.ts`,
|
||||
`${testDir}/subdir0/subdir0/bar.ts`,
|
||||
`${testDir}/subdir0/subdir0/foo.ts`,
|
||||
`${testDir}/subdir1/bar.ts`,
|
||||
`${testDir}/subdir1/foo.ts`
|
||||
]);
|
||||
});
|
||||
|
||||
testPerm({ read: true }, function testFindFilesDepth() {
|
||||
const files = findFiles([testDir], [".ts", ".md"], { depth: 1 });
|
||||
assertEqual(normalize(files), [
|
||||
`${testDir}/bar.md`,
|
||||
`${testDir}/bar.ts`,
|
||||
`${testDir}/foo.md`,
|
||||
`${testDir}/foo.ts`
|
||||
]);
|
||||
});
|
||||
|
||||
testPerm({ read: true }, function testFindFilesSkip() {
|
||||
const files = findFiles([testDir], [".ts", ".md"], {
|
||||
skip: ["foo.md", "subdir1"]
|
||||
});
|
||||
assertEqual(normalize(files), [
|
||||
`${testDir}/bar.md`,
|
||||
`${testDir}/bar.ts`,
|
||||
`${testDir}/foo.ts`,
|
||||
`${testDir}/subdir0/bar.ts`,
|
||||
`${testDir}/subdir0/foo.ts`,
|
||||
`${testDir}/subdir0/subdir0/bar.ts`,
|
||||
`${testDir}/subdir0/subdir0/foo.ts`
|
||||
]);
|
||||
});
|
||||
|
||||
testPerm({ read: false }, function testFindFilesPerm() {
|
||||
let caughtError = false;
|
||||
try {
|
||||
const files = findFiles([testDir], [".ts", ".md"]);
|
||||
} catch (e) {
|
||||
caughtError = true;
|
||||
assertEqual(e.kind, Deno.ErrorKind.PermissionDenied);
|
||||
assertEqual(e.name, "PermissionDenied");
|
||||
}
|
||||
assert(caughtError);
|
||||
});
|
|
@ -137,8 +137,7 @@ cd deno
|
|||
./tools/test.py
|
||||
|
||||
# Format code.
|
||||
# TODO: set PYTHONPATH in format.ts when run API has env option.
|
||||
PYTHONPATH=third_party/python_packages deno ./tools/format.ts --allow-read --allow-run
|
||||
./tools/format.py
|
||||
```
|
||||
|
||||
#### Prerequisites
|
||||
|
@ -612,9 +611,7 @@ Before submitting, please make sure the following is done:
|
|||
|
||||
1. There are tests that cover the changes.
|
||||
2. Ensure `./tools/test.py` passes.
|
||||
3. Format your code with
|
||||
`PYTHONPATH=third_party/python_packages deno ./tools/format.ts --allow-read --allow-run`.
|
||||
<!-- TODO: set PYTHONPATH in format.ts when run API has env option -->
|
||||
3. Format your code with `tools/format.py`
|
||||
4. Make sure `./tools/lint.py` passes.
|
||||
|
||||
### Changes to `third_party`
|
||||
|
|
Loading…
Add table
Reference in a new issue