fix(es): Fix simple bugs (#2077)

swc_ecma_visit:
 - Ensure that #1967 is wrong. (#1967)

swc:
 - Add a test for #1107. (#1107)

node:
 - Make optional fields optional. (#1947)
This commit is contained in:
강동윤 2021-08-15 03:34:14 +09:00 committed by GitHub
parent b0067adb9c
commit 949a4d9716
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 77 additions and 9 deletions

View File

@ -0,0 +1,40 @@
use swc_common::{input::StringInput, FileName, DUMMY_SP};
use swc_ecma_ast::*;
use swc_ecma_parser::{lexer::Lexer, Parser};
use swc_ecma_visit::{All, Node, VisitAll, VisitWith};
struct Issue1967;
impl VisitAll for Issue1967 {
fn visit_expr(&mut self, _: &Expr, _: &dyn Node) {
panic!("intended")
}
}
#[test]
#[should_panic = "intended"]
fn issue_1967() {
testing::run_test2(false, |cm, _handler| {
let fm = cm.new_source_file(FileName::Anon, "function foo(){ return 'I'; }".to_string());
let lexer = Lexer::new(
Default::default(),
EsVersion::latest(),
StringInput::from(&*fm),
None,
);
let mut parser = Parser::new_from(lexer);
let m = parser.parse_module().unwrap();
m.visit_with(
&Invalid { span: DUMMY_SP },
&mut All {
visitor: Issue1967 {},
},
);
Ok(())
})
.unwrap();
}

View File

@ -620,13 +620,13 @@ export interface ReactConfig {
*
* Defaults to `React.createElement`.
*/
pragma: string;
pragma?: string;
/**
* Replace the component used when compiling JSX fragments.
*
* Defaults to `React.Fragment`
*/
pragmaFrag: string;
pragmaFrag?: string;
/**
* Toggles whether or not to throw an error if a XML namespaced tag name is used. For example:
* `<f:image />`
@ -635,7 +635,7 @@ export interface ReactConfig {
* JSX does not currently have support for it.
*
*/
throwIfNamespace: boolean;
throwIfNamespace?: boolean;
/**
* Toggles plugins that aid in development, such as @swc/plugin-transform-react-jsx-self
* and @swc/plugin-transform-react-jsx-source.
@ -643,26 +643,26 @@ export interface ReactConfig {
* Defaults to `false`,
*
*/
development: boolean;
development?: boolean;
/**
* Use `Object.assign()` instead of `_extends`. Defaults to false.
*/
useBuiltins: boolean;
useBuiltins?: boolean;
/**
* Enable fast refresh feature for React app
*/
refresh: boolean;
refresh?: boolean;
/**
* jsx runtime
*/
runtime: 'automatic' | 'classic'
runtime?: 'automatic' | 'classic'
/**
* Declares the module specifier to be used for importing the `jsx` and `jsxs` factory functions when using `runtime` 'automatic'
*/
importSource: string
importSource?: string
}
/**
* - `import { DEBUG } from '@ember/env-flags';`
@ -786,7 +786,7 @@ export interface UmdConfig extends BaseModuleConfig {
export interface AmdConfig extends BaseModuleConfig {
type: "amd";
moduleId: string;
moduleId?: string;
}
export interface Output {

View File

@ -0,0 +1,11 @@
export class Class1 {
constructor({ name = '' }) {
console.log(name)
}
}
export class Class2 {
constructor({ name = '' }) {
console.log(name)
}
}

View File

@ -0,0 +1,17 @@
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
export var Class1 = function Class1(param) {
"use strict";
var _name = param.name, name = _name === void 0 ? '' : _name;
_classCallCheck(this, Class1);
console.log(name);
};
export var Class2 = function Class2(param) {
"use strict";
var _name = param.name, name = _name === void 0 ? '' : _name;
_classCallCheck(this, Class2);
console.log(name);
};