mirror of
https://github.com/swc-project/swc.git
synced 2024-10-04 20:28:43 +03:00
fix(es/transforms/compat): Preserve more span (#2762)
swc_ecma_transforms_compat: - `async_to_generator`: Preserve more span. (Closes #2758)
This commit is contained in:
parent
262c8941a2
commit
2fb4e5a60c
5
crates/swc/tests/fixture/issue-2758/1/input/.swcrc
Normal file
5
crates/swc/tests/fixture/issue-2758/1/input/.swcrc
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"jsc": {
|
||||
"target": "es2015"
|
||||
}
|
||||
}
|
6
crates/swc/tests/fixture/issue-2758/1/input/index.js
Normal file
6
crates/swc/tests/fixture/issue-2758/1/input/index.js
Normal file
@ -0,0 +1,6 @@
|
||||
const obj = {
|
||||
// A comment
|
||||
async foo() {
|
||||
console.log("Should work");
|
||||
}
|
||||
}
|
37
crates/swc/tests/fixture/issue-2758/1/output/index.js
Normal file
37
crates/swc/tests/fixture/issue-2758/1/output/index.js
Normal file
@ -0,0 +1,37 @@
|
||||
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
||||
try {
|
||||
var info = gen[key](arg);
|
||||
var value = info.value;
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
if (info.done) {
|
||||
resolve(value);
|
||||
} else {
|
||||
Promise.resolve(value).then(_next, _throw);
|
||||
}
|
||||
}
|
||||
function _asyncToGenerator(fn) {
|
||||
return function() {
|
||||
var self = this, args = arguments;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var gen = fn.apply(self, args);
|
||||
function _next(value) {
|
||||
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
||||
}
|
||||
function _throw(err) {
|
||||
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
||||
}
|
||||
_next(undefined);
|
||||
});
|
||||
};
|
||||
}
|
||||
const obj = {
|
||||
// A comment
|
||||
foo () {
|
||||
return _asyncToGenerator(function*() {
|
||||
console.log("Should work");
|
||||
})();
|
||||
}
|
||||
};
|
@ -395,6 +395,14 @@ impl VisitMut for Actual {
|
||||
|
||||
let original_fn_params = prop.function.params.take();
|
||||
|
||||
let prop_method_span = prop.function.span;
|
||||
let prop_method_body_span = if let Some(body) = &prop.function.body {
|
||||
body.span
|
||||
} else {
|
||||
DUMMY_SP
|
||||
};
|
||||
prop.function.span = prop_method_body_span;
|
||||
|
||||
let fn_ref = make_fn_ref(
|
||||
FnExpr {
|
||||
ident: None,
|
||||
@ -423,7 +431,7 @@ impl VisitMut for Actual {
|
||||
|
||||
prop.function = Function {
|
||||
params: original_fn_params,
|
||||
span: DUMMY_SP,
|
||||
span: prop_method_span,
|
||||
is_async: false,
|
||||
is_generator: false,
|
||||
body: Some(BlockStmt {
|
||||
|
@ -1,7 +1,7 @@
|
||||
use swc_common::DUMMY_SP;
|
||||
use swc_ecma_ast::*;
|
||||
use swc_ecma_utils::{IdentExt, IsDirective};
|
||||
use swc_ecma_visit::{as_folder, noop_fold_type, noop_visit_mut_type, Fold, VisitMut};
|
||||
use swc_ecma_visit::{as_folder, noop_visit_mut_type, Fold, VisitMut};
|
||||
|
||||
pub fn export_namespace_from() -> impl Fold + VisitMut {
|
||||
as_folder(ExportNamespaceFrom)
|
||||
|
Loading…
Reference in New Issue
Block a user