feat(transformer/typescript): improve function parameters name (#2079)

This commit is contained in:
Dunqing 2024-01-19 13:50:10 +08:00 committed by GitHub
parent 7711f7abaf
commit b5b2ef34af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 21 additions and 16 deletions

View file

@ -6,7 +6,7 @@ use oxc_syntax::{
operator::{AssignmentOperator, BinaryOperator, LogicalOperator}, operator::{AssignmentOperator, BinaryOperator, LogicalOperator},
NumberBase, NumberBase,
}; };
use rustc_hash::FxHashSet; use rustc_hash::{FxHashMap, FxHashSet};
use std::{mem, rc::Rc}; use std::{mem, rc::Rc};
mod options; mod options;
@ -26,6 +26,7 @@ pub struct TypeScript<'a> {
verbatim_module_syntax: bool, verbatim_module_syntax: bool,
export_name_set: FxHashSet<Atom>, export_name_set: FxHashSet<Atom>,
options: TypescriptOptions, options: TypescriptOptions,
namespace_arg_names: FxHashMap<Atom, usize>,
} }
impl<'a> TypeScript<'a> { impl<'a> TypeScript<'a> {
@ -41,6 +42,7 @@ impl<'a> TypeScript<'a> {
verbatim_module_syntax, verbatim_module_syntax,
export_name_set: FxHashSet::default(), export_name_set: FxHashSet::default(),
options: options.typescript.clone().unwrap_or_default(), options: options.typescript.clone().unwrap_or_default(),
namespace_arg_names: FxHashMap::default(),
} }
} }
@ -669,6 +671,12 @@ impl<'a> TypeScript<'a> {
} }
} }
fn get_namespace_arg_name(&mut self, name: &Atom) -> Atom {
let count = self.namespace_arg_names.entry(name.clone()).or_insert(0);
*count += 1;
format!("_{name}{}", if *count > 1 { count.to_string() } else { String::new() }).into()
}
/// ```TypeScript /// ```TypeScript
/// // transform ts module block /// // transform ts module block
/// namespace Foo { /// namespace Foo {
@ -696,16 +704,14 @@ impl<'a> TypeScript<'a> {
let callee = { let callee = {
let body = self.ast.function_body(SPAN, self.ast.new_vec(), body_statements); let body = self.ast.function_body(SPAN, self.ast.new_vec(), body_statements);
let arg_name = self.get_namespace_arg_name(name);
let params = self.ast.formal_parameters( let params = self.ast.formal_parameters(
SPAN, SPAN,
FormalParameterKind::FormalParameter, FormalParameterKind::FormalParameter,
self.ast.new_vec_single(self.ast.formal_parameter( self.ast.new_vec_single(self.ast.formal_parameter(
SPAN, SPAN,
self.ast.binding_pattern( self.ast.binding_pattern(
self.ast.binding_pattern_identifier(BindingIdentifier::new( self.ast.binding_pattern_identifier(BindingIdentifier::new(SPAN, arg_name)),
SPAN,
format!("_{}", name.clone()).into(),
)),
None, None,
false, false,
), ),

View file

@ -1,4 +1,4 @@
Passed: 322/1179 Passed: 323/1179
# All Passed: # All Passed:
* babel-plugin-transform-numeric-separator * babel-plugin-transform-numeric-separator
@ -832,7 +832,7 @@ Passed: 322/1179
* general/function-duplicate-name/input.js * general/function-duplicate-name/input.js
* general/object/input.js * general/object/input.js
# babel-plugin-transform-typescript (91/158) # babel-plugin-transform-typescript (92/158)
* class/abstract-class-decorated/input.ts * class/abstract-class-decorated/input.ts
* class/abstract-class-decorated-method/input.ts * class/abstract-class-decorated-method/input.ts
* class/abstract-class-decorated-parameter/input.ts * class/abstract-class-decorated-parameter/input.ts
@ -869,7 +869,6 @@ Passed: 322/1179
* namespace/clobber-enum/input.ts * namespace/clobber-enum/input.ts
* namespace/clobber-export/input.ts * namespace/clobber-export/input.ts
* namespace/clobber-import/input.ts * namespace/clobber-import/input.ts
* namespace/contentious-names/input.ts
* namespace/empty-removed/input.ts * namespace/empty-removed/input.ts
* namespace/export-type-only/input.ts * namespace/export-type-only/input.ts
* namespace/module-nested/input.ts * namespace/module-nested/input.ts

View file

@ -631,9 +631,9 @@ let M6;
})(A || (A = {})); })(A || (A = {}));
})(M6 || (M6 = {})); })(M6 || (M6 = {}));
let M6; let M6;
(function(_M6) { (function(_M62) {
export let A; export let A;
(function(_A) { (function(_A2) {
var Color = (Color => { var Color = (Color => {
const Yellow = 1; const Yellow = 1;
Color[Color['Yellow'] = Yellow] = 'Yellow'; Color[Color['Yellow'] = Yellow] = 'Yellow';
@ -667,7 +667,7 @@ export var E3 = (E3 => {
})(E3 || {}); })(E3 || {});
})(M || (M = {})); })(M || (M = {}));
let M; let M;
(function(_M) { (function(_M2) {
var E1 = (E1 => { var E1 = (E1 => {
const B = 'foo'.length; const B = 'foo'.length;
E1[E1['B'] = B] = 'B'; E1[E1['B'] = B] = 'B';
@ -685,7 +685,7 @@ let M;
})(E3 || {}); })(E3 || {});
})(M || (M = {})); })(M || (M = {}));
let M; let M;
(function(_M) { (function(_M3) {
var E1 = (E1 => { var E1 = (E1 => {
const C = 0; const C = 0;
E1[E1['C'] = C] = 'C'; E1[E1['C'] = C] = 'C';
@ -711,7 +711,7 @@ let M1;
})(E1 || {}); })(E1 || {});
})(M1 || (M1 = {})); })(M1 || (M1 = {}));
let M1; let M1;
(function(_M1) { (function(_M12) {
var E1 = (E1 => { var E1 = (E1 => {
const B = 0; const B = 0;
E1[E1['B'] = B] = 'B'; E1[E1['B'] = B] = 'B';
@ -719,7 +719,7 @@ let M1;
})(E1 || {}); })(E1 || {});
})(M1 || (M1 = {})); })(M1 || (M1 = {}));
let M1; let M1;
(function(_M1) { (function(_M13) {
var E1 = (E1 => { var E1 = (E1 => {
const C = 0; const C = 0;
E1[E1['C'] = C] = 'C'; E1[E1['C'] = C] = 'C';
@ -735,7 +735,7 @@ let M2;
})(E1 || {}); })(E1 || {});
})(M2 || (M2 = {})); })(M2 || (M2 = {}));
let M2; let M2;
(function(_M2) { (function(_M22) {
var E1 = (E1 => { var E1 = (E1 => {
const B = 0; const B = 0;
E1[E1['B'] = B] = 'B'; E1[E1['B'] = B] = 'B';
@ -743,7 +743,7 @@ let M2;
})(E1 || {}); })(E1 || {});
})(M2 || (M2 = {})); })(M2 || (M2 = {}));
let M2; let M2;
(function(_M2) { (function(_M23) {
var E1 = (E1 => { var E1 = (E1 => {
const C = 0; const C = 0;
E1[E1['C'] = C] = 'C'; E1[E1['C'] = C] = 'C';