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 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(
|
let fn_ref = make_fn_ref(
|
||||||
FnExpr {
|
FnExpr {
|
||||||
ident: None,
|
ident: None,
|
||||||
@ -423,7 +431,7 @@ impl VisitMut for Actual {
|
|||||||
|
|
||||||
prop.function = Function {
|
prop.function = Function {
|
||||||
params: original_fn_params,
|
params: original_fn_params,
|
||||||
span: DUMMY_SP,
|
span: prop_method_span,
|
||||||
is_async: false,
|
is_async: false,
|
||||||
is_generator: false,
|
is_generator: false,
|
||||||
body: Some(BlockStmt {
|
body: Some(BlockStmt {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use swc_common::DUMMY_SP;
|
use swc_common::DUMMY_SP;
|
||||||
use swc_ecma_ast::*;
|
use swc_ecma_ast::*;
|
||||||
use swc_ecma_utils::{IdentExt, IsDirective};
|
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 {
|
pub fn export_namespace_from() -> impl Fold + VisitMut {
|
||||||
as_folder(ExportNamespaceFrom)
|
as_folder(ExportNamespaceFrom)
|
||||||
|
Loading…
Reference in New Issue
Block a user