mirror of
https://github.com/denoland/deno.git
synced 2025-02-01 20:25:12 -05:00
feat(cli): add ignore directives to bundled code (#13309)
This commit adds lint and fmt ignore directives to bundled code as well as a comment stating that the code was bundled and shouldn't be edited manually.
This commit is contained in:
parent
62291e9b0e
commit
50e8ab8a86
7 changed files with 44 additions and 3 deletions
19
cli/emit.rs
19
cli/emit.rs
|
@ -42,6 +42,13 @@ use std::result;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
|
const IGNORE_DIRECTIVES: &[&str] = &[
|
||||||
|
"// deno-fmt-ignore-file",
|
||||||
|
"// deno-lint-ignore-file",
|
||||||
|
"// This code was bundled using `deno bundle` and it's not recommended to edit it manually",
|
||||||
|
""
|
||||||
|
];
|
||||||
|
|
||||||
/// Represents the "default" type library that should be used when type
|
/// Represents the "default" type library that should be used when type
|
||||||
/// checking the code in the module graph. Note that a user provided config
|
/// checking the code in the module graph. Note that a user provided config
|
||||||
/// of `"lib"` would override this value.
|
/// of `"lib"` would override this value.
|
||||||
|
@ -503,6 +510,7 @@ impl From<BundleType> for swc::bundler::ModuleType {
|
||||||
pub(crate) struct BundleOptions {
|
pub(crate) struct BundleOptions {
|
||||||
pub bundle_type: BundleType,
|
pub bundle_type: BundleType,
|
||||||
pub ts_config: TsConfig,
|
pub ts_config: TsConfig,
|
||||||
|
pub emit_ignore_directives: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A module loader for swc which does the appropriate retrieval and transpiling
|
/// A module loader for swc which does the appropriate retrieval and transpiling
|
||||||
|
@ -630,12 +638,21 @@ pub(crate) fn bundle(
|
||||||
let mut srcmap = Vec::new();
|
let mut srcmap = Vec::new();
|
||||||
{
|
{
|
||||||
let cfg = swc::codegen::Config { minify: false };
|
let cfg = swc::codegen::Config { minify: false };
|
||||||
let wr = Box::new(swc::codegen::text_writer::JsWriter::new(
|
let mut wr = Box::new(swc::codegen::text_writer::JsWriter::new(
|
||||||
cm.clone(),
|
cm.clone(),
|
||||||
"\n",
|
"\n",
|
||||||
&mut buf,
|
&mut buf,
|
||||||
Some(&mut srcmap),
|
Some(&mut srcmap),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
if options.emit_ignore_directives {
|
||||||
|
// write leading comments in bundled file
|
||||||
|
use swc::codegen::text_writer::WriteJs;
|
||||||
|
use swc::common::source_map::DUMMY_SP;
|
||||||
|
let cmt = IGNORE_DIRECTIVES.join("\n") + "\n";
|
||||||
|
wr.write_comment(DUMMY_SP, &cmt)?;
|
||||||
|
}
|
||||||
|
|
||||||
let mut emitter = swc::codegen::Emitter {
|
let mut emitter = swc::codegen::Emitter {
|
||||||
cfg,
|
cfg,
|
||||||
cm: cm.clone(),
|
cm: cm.clone(),
|
||||||
|
|
|
@ -732,6 +732,7 @@ fn bundle_module_graph(
|
||||||
emit::BundleOptions {
|
emit::BundleOptions {
|
||||||
bundle_type: emit::BundleType::Module,
|
bundle_type: emit::BundleType::Module,
|
||||||
ts_config,
|
ts_config,
|
||||||
|
emit_ignore_directives: true,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -285,6 +285,7 @@ async fn op_emit(
|
||||||
emit::BundleOptions {
|
emit::BundleOptions {
|
||||||
bundle_type: bundle.into(),
|
bundle_type: bundle.into(),
|
||||||
ts_config,
|
ts_config,
|
||||||
|
emit_ignore_directives: true,
|
||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
let mut files = HashMap::new();
|
let mut files = HashMap::new();
|
||||||
|
|
|
@ -442,3 +442,8 @@ itest!(bundle_export_specifier_with_alias {
|
||||||
args: "bundle bundle/file_tests-fixture16.ts",
|
args: "bundle bundle/file_tests-fixture16.ts",
|
||||||
output: "bundle/fixture16.out",
|
output: "bundle/fixture16.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
itest!(bundle_ignore_directives {
|
||||||
|
args: "bundle subdir/mod1.ts",
|
||||||
|
output: "bundle_ignore_directives.test.out",
|
||||||
|
});
|
||||||
|
|
|
@ -130,7 +130,7 @@ fn standalone_error() {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert!(!output.status.success());
|
assert!(!output.status.success());
|
||||||
assert_eq!(output.stdout, b"");
|
assert_eq!(output.stdout, b"");
|
||||||
let expected_stderr = "error: Error: boom!\n at boom (file://$deno$/bundle.js:2:11)\n at foo (file://$deno$/bundle.js:5:5)\n at file://$deno$/bundle.js:7:1\n";
|
let expected_stderr = "error: Error: boom!\n at boom (file://$deno$/bundle.js:6:11)\n at foo (file://$deno$/bundle.js:9:5)\n at file://$deno$/bundle.js:11:1\n";
|
||||||
let stderr = String::from_utf8(output.stderr).unwrap();
|
let stderr = String::from_utf8(output.stderr).unwrap();
|
||||||
assert_eq!(stderr, expected_stderr);
|
assert_eq!(stderr, expected_stderr);
|
||||||
}
|
}
|
||||||
|
|
6
cli/tests/testdata/bundle_ignore_directives.test.out
vendored
Normal file
6
cli/tests/testdata/bundle_ignore_directives.test.out
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[WILDCARD]
|
||||||
|
// deno-fmt-ignore-file
|
||||||
|
// deno-lint-ignore-file
|
||||||
|
// This code was bundled using `deno bundle` and it's not recommended to edit it manually
|
||||||
|
|
||||||
|
[WILDCARD]
|
13
cli/tests/testdata/compiler_api_test.ts
vendored
13
cli/tests/testdata/compiler_api_test.ts
vendored
|
@ -418,10 +418,21 @@ Deno.test({
|
||||||
"/b.ts": `export const b = "b";`,
|
"/b.ts": `export const b = "b";`,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
const ignoreDirecives = [
|
||||||
|
"// deno-fmt-ignore-file",
|
||||||
|
"// deno-lint-ignore-file",
|
||||||
|
"// This code was bundled using `deno bundle` and it's not recommended to edit it manually",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
].join("\n");
|
||||||
assert(diagnostics);
|
assert(diagnostics);
|
||||||
assertEquals(diagnostics.length, 0);
|
assertEquals(diagnostics.length, 0);
|
||||||
assertEquals(Object.keys(files).length, 2);
|
assertEquals(Object.keys(files).length, 2);
|
||||||
assert(files["deno:///bundle.js"].startsWith("(function() {\n"));
|
assert(
|
||||||
|
files["deno:///bundle.js"].startsWith(
|
||||||
|
ignoreDirecives + "(function() {\n",
|
||||||
|
),
|
||||||
|
);
|
||||||
assert(files["deno:///bundle.js"].endsWith("})();\n"));
|
assert(files["deno:///bundle.js"].endsWith("})();\n"));
|
||||||
assert(files["deno:///bundle.js.map"]);
|
assert(files["deno:///bundle.js.map"]);
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Reference in a new issue