summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2019-02-01 18:29:00 -0500
committerRyan Dahl <ry@tinyclouds.org>2019-02-02 17:48:43 -0500
commit18b815e33627865b8f4d13f29e2e6e4dc7670f1d (patch)
tree7ee1b9af60fa161ef4356ae28ecf7e2c94a5cb0e
parentf84da880bb5bd8fadd7c884ecfeb48aa5b7b9c08 (diff)
Support --fmt
-rw-r--r--.prettierignore1
-rw-r--r--src/flags.rs5
-rw-r--r--src/main.rs9
-rw-r--r--tests/badly_formatted.js4
-rw-r--r--tests/badly_formatted_fixed.js1
-rwxr-xr-xtools/fmt_test.py34
-rwxr-xr-xtools/prefetch_test.py9
-rwxr-xr-xtools/test.py2
-rw-r--r--tools/util.py8
9 files changed, 64 insertions, 9 deletions
diff --git a/.prettierignore b/.prettierignore
index 7fe72e0b9..9d83dd750 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,2 +1,3 @@
js/flatbuffers.js
tests/error_syntax.js
+tests/badly_formatted.js
diff --git a/src/flags.rs b/src/flags.rs
index ecc60922e..d68bb5e09 100644
--- a/src/flags.rs
+++ b/src/flags.rs
@@ -30,6 +30,7 @@ pub struct DenoFlags {
pub types: bool,
pub prefetch: bool,
pub info: bool,
+ pub fmt: bool,
}
pub fn get_usage(opts: &Options) -> String {
@@ -115,6 +116,9 @@ fn set_recognized_flags(
if matches.opt_present("info") {
flags.info = true;
}
+ if matches.opt_present("fmt") {
+ flags.fmt = true;
+ }
if !matches.free.is_empty() {
rest.extend(matches.free);
@@ -152,6 +156,7 @@ pub fn set_flags(
opts.optflag("", "types", "Print runtime TypeScript declarations.");
opts.optflag("", "prefetch", "Prefetch the dependencies.");
opts.optflag("", "info", "Show source file related info");
+ opts.optflag("", "fmt", "Format code.");
let mut flags = DenoFlags::default();
diff --git a/src/main.rs b/src/main.rs
index f6a9c49ee..36a39dbf0 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -63,8 +63,8 @@ fn print_err_and_exit(err: errors::RustOrJsError) {
fn main() {
log::set_logger(&LOGGER).unwrap();
let args = env::args().collect();
- let (flags, rest_argv, usage_string) =
- flags::set_flags(args).unwrap_or_else(|err| {
+ let (mut flags, mut rest_argv, usage_string) = flags::set_flags(args)
+ .unwrap_or_else(|err| {
eprintln!("{}", err);
std::process::exit(1)
});
@@ -80,6 +80,11 @@ fn main() {
LevelFilter::Warn
});
+ if flags.fmt {
+ rest_argv.insert(1, "https://deno.land/x/std/prettier/main.ts".to_string());
+ flags.allow_write = true;
+ }
+
let should_prefetch = flags.prefetch;
let should_display_info = flags.info;
diff --git a/tests/badly_formatted.js b/tests/badly_formatted.js
new file mode 100644
index 000000000..17e3e6be0
--- /dev/null
+++ b/tests/badly_formatted.js
@@ -0,0 +1,4 @@
+
+console.log(
+ "Hello World"
+)
diff --git a/tests/badly_formatted_fixed.js b/tests/badly_formatted_fixed.js
new file mode 100644
index 000000000..accefceba
--- /dev/null
+++ b/tests/badly_formatted_fixed.js
@@ -0,0 +1 @@
+console.log("Hello World");
diff --git a/tools/fmt_test.py b/tools/fmt_test.py
new file mode 100755
index 000000000..95733dc20
--- /dev/null
+++ b/tools/fmt_test.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
+import os
+import sys
+from util import mkdtemp, root_path, tests_path, run, green_ok
+import shutil
+
+
+def fmt_test(deno_exe):
+ sys.stdout.write("fmt_test...")
+ sys.stdout.flush()
+ d = mkdtemp()
+ try:
+ fixed_filename = os.path.join(tests_path, "badly_formatted_fixed.js")
+ src = os.path.join(tests_path, "badly_formatted.js")
+ dst = os.path.join(d, "badly_formatted.js")
+ shutil.copyfile(src, dst)
+ # Set DENO_DIR to //js/ so we don't have to rely on an intenet
+ # connection to download https://deno.land/x/std/prettier/main.ts
+ deno_dir = os.path.join(root_path, "js")
+ run([deno_exe, dst, "--fmt"], merge_env={"DENO_DIR": deno_dir})
+ with open(fixed_filename) as f:
+ expected = f.read()
+ with open(dst) as f:
+ actual = f.read()
+ assert expected == actual
+ finally:
+ shutil.rmtree(d)
+ print green_ok()
+
+
+if __name__ == "__main__":
+ fmt_test(sys.argv[1])
+
diff --git a/tools/prefetch_test.py b/tools/prefetch_test.py
index bc106d5f5..3024aedf3 100755
--- a/tools/prefetch_test.py
+++ b/tools/prefetch_test.py
@@ -2,8 +2,7 @@
# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
import os
import sys
-from util import tests_path, run_output, build_path, executable_suffix, green_ok
-import tempfile
+from util import mkdtemp, tests_path, run_output, green_ok
import shutil
@@ -11,11 +10,7 @@ def prefetch_test(deno_exe):
sys.stdout.write("prefetch_test...")
sys.stdout.flush()
- # On Windows, set the base directory that mkdtemp() uses explicitly. If not,
- # it'll use the short (8.3) path to the temp dir, which triggers the error
- # 'TS5009: Cannot find the common subdirectory path for the input files.'
- temp_dir = os.environ["TEMP"] if os.name == 'nt' else None
- deno_dir = tempfile.mkdtemp(dir=temp_dir)
+ deno_dir = mkdtemp()
try:
t = os.path.join(tests_path, "006_url_imports.ts")
output = run_output([deno_exe, "--prefetch", t],
diff --git a/tools/test.py b/tools/test.py
index 614395b71..8da13b01a 100755
--- a/tools/test.py
+++ b/tools/test.py
@@ -13,6 +13,7 @@ from util_test import util_test
from benchmark_test import benchmark_test
from repl_test import repl_tests
from prefetch_test import prefetch_test
+from fmt_test import fmt_test
import subprocess
import http_server
@@ -61,6 +62,7 @@ def main(argv):
unit_tests(deno_exe)
prefetch_test(deno_exe)
+ fmt_test(deno_exe)
integration_tests(deno_exe)
diff --git a/tools/util.py b/tools/util.py
index a4355b41f..ca18faf54 100644
--- a/tools/util.py
+++ b/tools/util.py
@@ -5,6 +5,7 @@ import shutil
import stat
import sys
import subprocess
+import tempfile
RESET = "\x1b[0m"
FG_RED = "\x1b[31m"
@@ -381,3 +382,10 @@ def parse_wrk_output(output):
def platform():
return {"linux2": "linux", "darwin": "mac", "win32": "win"}[sys.platform]
+
+def mkdtemp():
+ # On Windows, set the base directory that mkdtemp() uses explicitly. If not,
+ # it'll use the short (8.3) path to the temp dir, which triggers the error
+ # 'TS5009: Cannot find the common subdirectory path for the input files.'
+ temp_dir = os.environ["TEMP"] if os.name == 'nt' else None
+ return tempfile.mkdtemp(dir=temp_dir)