Skip to content

Commit 679373c

Browse files
Remove some easy to remove semicolons for ASI (#321)
1 parent d34ed7c commit 679373c

File tree

211 files changed

+261
-209
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

211 files changed

+261
-209
lines changed

src/transformers/chunk/asi.ts

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* Copyright 2018 The AMP HTML Authors. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS-IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
import { ChunkTransform } from '../../transform';
18+
import { Range } from '../../types';
19+
import { parse } from '../../acorn';
20+
import MagicString from 'magic-string';
21+
22+
export default class ASITransform extends ChunkTransform {
23+
public name = 'ASITransform';
24+
25+
/**
26+
* Small reduction in semi-colons, removing from end of block statements.
27+
* @param source source following closure compiler minification
28+
*/
29+
public async post(source: MagicString): Promise<MagicString> {
30+
const code = source.toString();
31+
const program = parse(code);
32+
33+
if (program.body) {
34+
const lastStatement = program.body[program.body.length - 1];
35+
if (lastStatement) {
36+
const [start, end] = lastStatement.range as Range;
37+
if (lastStatement.type === 'EmptyStatement') {
38+
source.remove(start, end);
39+
} else {
40+
const lastStatementSource = code.substring(start, end);
41+
if (lastStatementSource.endsWith(';')) {
42+
source.overwrite(start, end, code.substring(start, end - 1));
43+
}
44+
}
45+
}
46+
}
47+
48+
return source;
49+
}
50+
}

src/transformers/chunk/const.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export default class ConstTransform extends ChunkTransform {
3131
*/
3232
public async pre(source: MagicString): Promise<MagicString> {
3333
const code = source.toString();
34-
const program = parse(source.toString());
34+
const program = parse(code);
3535

3636
walk.simple(program, {
3737
VariableDeclaration(node: VariableDeclaration) {

src/transformers/chunk/transforms.ts

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import ExportTransform from './exports';
3030
import ImportTransform from './imports';
3131
import StrictTransform from './strict';
3232
import ConstTransform from './const';
33+
import ASITransform from './asi';
3334
import { ChunkTransform, chunkLifecycle } from '../../transform';
3435
import { Mangle } from '../mangle';
3536
import { Ebbinghaus } from '../ebbinghaus';
@@ -46,6 +47,7 @@ const TRANSFORMS: Array<typeof ChunkTransform> = [
4647
StrictTransform,
4748
ExportTransform,
4849
ImportTransform,
50+
ASITransform,
4951
// Acorn cannot parse content starting here.
5052
HashbangApplyTransform,
5153
];
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export var multipleArguments=(a,b)=>console.log(a,b);
1+
export var multipleArguments=(a,b)=>console.log(a,b)
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export var multipleArguments=(a,b)=>console.log(a,b);
1+
export var multipleArguments=(a,b)=>console.log(a,b)
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export function multipleArguments(a,b){return console.log(a,b)};
1+
export function multipleArguments(a,b){return console.log(a,b)}
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11

2-
export var multipleArguments=(a, b) => console.log(a, b);
2+
export var multipleArguments=(a, b) => console.log(a, b)
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export var singleArgument=a=>console.log(a);
1+
export var singleArgument=a=>console.log(a)
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export var singleArgument=a=>console.log(a);
1+
export var singleArgument=a=>console.log(a)
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export function singleArgument(a){return console.log(a)};
1+
export function singleArgument(a){return console.log(a)}
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11

2-
export var singleArgument=a => console.log(a);
2+
export var singleArgument=a => console.log(a)
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
console.log("foo");
1+
console.log("foo")
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
let b=[3,4],c=[5,6];export function yes(a){return 0<=c.indexOf(a)&&0<=b.indexOf(a)};
1+
let b=[3,4],c=[5,6];export function yes(a){return 0<=c.indexOf(a)&&0<=b.indexOf(a)}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
let b=[3,4],c=[5,6];export function yes(a){return 0<=c.indexOf(a)&&0<=b.indexOf(a)};
1+
let b=[3,4],c=[5,6];export function yes(a){return 0<=c.indexOf(a)&&0<=b.indexOf(a)}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
var b=[3,4],c=[5,6];export function yes(a){return 0<=c.indexOf(a)&&0<=b.indexOf(a)};
1+
var b=[3,4],c=[5,6];export function yes(a){return 0<=c.indexOf(a)&&0<=b.indexOf(a)}

test/const-rename/fixtures/rename.esm.pretty.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
let b = [3, 4], c = [5, 6];
33
export function yes(a) {
44
return 0 <= c.indexOf(a) && 0 <= b.indexOf(a);
5-
};
5+
}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default [];
1+
export default []
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default [];
1+
export default []
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default [];
1+
export default []
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11

2-
export default [];
2+
export default []
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default a=>console.log(a);
1+
export default a=>console.log(a)
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default a=>console.log(a);
1+
export default a=>console.log(a)
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default function(a){return console.log(a)};
1+
export default function(a){return console.log(a)}
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11

2-
export default a => console.log(a);
2+
export default a => console.log(a)
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
class a{constructor(b){this.a=b}console(){console.log(this.a)}}export default a;
1+
class a{constructor(b){this.a=b}console(){console.log(this.a)}}export default a
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
class a{constructor(b){this.name_=b}console(){console.log(this.name_)}}export default a;
1+
class a{constructor(b){this.name_=b}console(){console.log(this.name_)}}export default a
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
function a(b){this.name_=b}a.prototype.console=function(){console.log(this.name_)};export default a;
1+
function a(b){this.name_=b}a.prototype.console=function(){console.log(this.name_)};export default a

test/export-default/fixtures/class.esm.pretty.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ class a {
77
console.log(this.name_);
88
}
99
}
10-
export default a;
10+
export default a
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default function(a){console.log(a);console.log(1)};
1+
export default function(a){console.log(a);console.log(1)}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default function(a){console.log(a);console.log(1)};
1+
export default function(a){console.log(a);console.log(1)}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default function(a){console.log(a);console.log(1)};
1+
export default function(a){console.log(a);console.log(1)}

test/export-default/fixtures/function.esm.pretty.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
export default function(a) {
33
console.log(a);
44
console.log(1);
5-
};
5+
}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default 1;
1+
export default 1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default 1;
1+
export default 1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default 1;
1+
export default 1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11

2-
export default 1;
2+
export default 1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
class a{constructor(b){this.a=b}console(){console.log(this.a)}}export default a;
1+
class a{constructor(b){this.a=b}console(){console.log(this.a)}}export default a
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
class a{constructor(b){this.name_=b}console(){console.log(this.name_)}}export default a;
1+
class a{constructor(b){this.name_=b}console(){console.log(this.name_)}}export default a
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
function a(b){this.name_=b}a.prototype.console=function(){console.log(this.name_)};export default a;
1+
function a(b){this.name_=b}a.prototype.console=function(){console.log(this.name_)};export default a

test/export-default/fixtures/named-class.esm.pretty.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ class a {
77
console.log(this.name_);
88
}
99
}
10-
export default a;
10+
export default a
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default function(a){console.log(a);console.log(1)};
1+
export default function(a){console.log(a);console.log(1)}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default function(a){console.log(a);console.log(1)};
1+
export default function(a){console.log(a);console.log(1)}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default function(a){console.log(a);console.log(1)};
1+
export default function(a){console.log(a);console.log(1)}

test/export-default/fixtures/named-function.esm.pretty.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
export default function(a) {
33
console.log(a);
44
console.log(1);
5-
};
5+
}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default 42;
1+
export default 42
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default 42;
1+
export default 42
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default 42;
1+
export default 42
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11

2-
export default 42;
2+
export default 42
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default {key:"value"};
1+
export default {key:"value"}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default {key:"value"};
1+
export default {key:"value"}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default {key:"value"};
1+
export default {key:"value"}
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11

2-
export default {key:"value"};
2+
export default {key:"value"}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedArray}from'./external.js';
1+
export{exportedArray}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedArray}from'./external.js';
1+
export{exportedArray}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedArray}from'./external.js';
1+
export{exportedArray}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedArray}from'./external.js';
1+
export{exportedArray}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedClass}from'./external.js';
1+
export{exportedClass}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedClass}from'./external.js';
1+
export{exportedClass}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedClass}from'./external.js';
1+
export{exportedClass}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedClass}from'./external.js';
1+
export{exportedClass}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constFunction}from'./external.js';
1+
export{constFunction}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constFunction}from'./external.js';
1+
export{constFunction}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constFunction}from'./external.js';
1+
export{constFunction}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constFunction}from'./external.js';
1+
export{constFunction}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constNumber}from'./external.js';
1+
export{constNumber}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constNumber}from'./external.js';
1+
export{constNumber}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constNumber}from'./external.js';
1+
export{constNumber}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constNumber}from'./external.js';
1+
export{constNumber}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{default as X}from'./external.js';
1+
export{default as X}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{default as X}from'./external.js';
1+
export{default as X}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{default as X}from'./external.js';
1+
export{default as X}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{default as X}from'./external.js';
1+
export{default as X}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedFunction}from'./external.js';
1+
export{exportedFunction}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedFunction}from'./external.js';
1+
export{exportedFunction}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedFunction}from'./external.js';
1+
export{exportedFunction}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedFunction}from'./external.js';
1+
export{exportedFunction}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedFunction as exF}from'./external.js';
1+
export{exportedFunction as exF}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedFunction as exF}from'./external.js';
1+
export{exportedFunction as exF}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedFunction as exF}from'./external.js';
1+
export{exportedFunction as exF}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedFunction as exF}from'./external.js';
1+
export{exportedFunction as exF}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{default as Y}from'./external-default.js';export{default as X}from'./external.js';
1+
export{default as Y}from'./external-default.js';export{default as X}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{default as Y}from'./external-default.js';export{default as X}from'./external.js';
1+
export{default as Y}from'./external-default.js';export{default as X}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{default as Y}from'./external-default.js';export{default as X}from'./external.js';
1+
export{default as Y}from'./external-default.js';export{default as X}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
export{default as Y}from'./external-default.js';export{default as X}from'./external.js';
1+
export{default as Y}from'./external-default.js';export{default as X}from'./external.js'
22

Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constObject}from'./external.js';
1+
export{constObject}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constObject}from'./external.js';
1+
export{constObject}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constObject}from'./external.js';
1+
export{constObject}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{constObject}from'./external.js';
1+
export{constObject}from'./external.js'
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedFunction as a}from'y.js';a("1");
1+
export{exportedFunction as a}from'y.js';a("1")
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedFunction as a}from'y.js';a("1");
1+
export{exportedFunction as a}from'y.js';a("1")
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export{exportedFunction as a}from'y.js';a("1");
1+
export{exportedFunction as a}from'y.js';a("1")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
export{exportedFunction as a}from'y.js';
2-
a("1");
2+
a("1")
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default 1;
1+
export default 1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default 1;
1+
export default 1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export default 1;
1+
export default 1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11

2-
export default 1;
2+
export default 1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export var foo=1;
1+
export var foo=1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export var foo=1;
1+
export var foo=1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export var foo=1;
1+
export var foo=1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11

2-
export var foo=1;
2+
export var foo=1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
var b=Symbol.for("smth");export var isSmth=a=>a&&!!a[b];
1+
var b=Symbol.for("smth");export var isSmth=a=>a&&!!a[b]
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
var b=Symbol.for("smth");export var isSmth=a=>a&&!!a[b];
1+
var b=Symbol.for("smth");export var isSmth=a=>a&&!!a[b]

0 commit comments

Comments
 (0)