From 18b815e33627865b8f4d13f29e2e6e4dc7670f1d Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Fri, 1 Feb 2019 18:29:00 -0500 Subject: [PATCH] Support --fmt --- .prettierignore | 1 + src/flags.rs | 5 +++++ src/main.rs | 9 +++++++-- tests/badly_formatted.js | 4 ++++ tests/badly_formatted_fixed.js | 1 + tools/fmt_test.py | 34 ++++++++++++++++++++++++++++++++++ tools/prefetch_test.py | 9 ++------- tools/test.py | 2 ++ tools/util.py | 8 ++++++++ 9 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 tests/badly_formatted.js create mode 100644 tests/badly_formatted_fixed.js create mode 100755 tools/fmt_test.py diff --git a/.prettierignore b/.prettierignore index 7fe72e0b9e..9d83dd750e 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 ecc60922e1..d68bb5e09c 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 f6a9c49ee8..36a39dbf06 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 0000000000..17e3e6be0d --- /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 0000000000..accefceba6 --- /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 0000000000..95733dc209 --- /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 bc106d5f5e..3024aedf3b 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 614395b719..8da13b01a9 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 a4355b41f8..ca18faf548 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)