Skip to content

Commit

Permalink
Merge branch 'tresorit-directive_handling' into release-0.54.0
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed Jan 12, 2018
2 parents 68b736a + 13c779d commit 407709c
Show file tree
Hide file tree
Showing 9 changed files with 90 additions and 0 deletions.
24 changes: 24 additions & 0 deletions src/ast/nodes/ExpressionStatement.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,31 @@
import MagicString from 'magic-string';
import { StatementBase } from './shared/Statement';
import Scope from '../scopes/Scope';

export default class ExpressionStatement extends StatementBase {
directive?: string;

initialiseNode(_parentScope: Scope){
if (this.directive && this.directive !== 'use strict' && this.parent.type === "Program") {
this.module.warn( // This is necessary, because either way (deleting or not) can lead to errors.
{
code: 'MODULE_LEVEL_DIRECTIVE',
message: `Module level directives cause errors when bundled, '${this.directive}' was ignored.`
},
this.start
);
}

return super.initialiseNode(_parentScope);
}

shouldBeIncluded() {
if (this.directive && this.directive !== 'use strict')
return this.parent.type !== "Program";

return super.shouldBeIncluded();
}

render (code: MagicString, es: boolean) {
super.render(code, es);
if (this.included) this.insertSemicolon(code);
Expand Down
8 changes: 8 additions & 0 deletions test/function/samples/function-asm-directive/_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
var assert = require( 'assert' );

module.exports = {
description: 'shouldn\'t delete use asm from the start of a function body',
code: function ( code ) {
assert.notEqual( code.indexOf('use asm'), -1 );
},
};
5 changes: 5 additions & 0 deletions test/function/samples/function-asm-directive/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export function a() {
"use asm";

return 1;
}
9 changes: 9 additions & 0 deletions test/function/samples/function-directive-not-first/_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
var assert = require( 'assert' );

module.exports = {
description: 'should delete use asm from function body if it\'s not first expression',
code: function ( code ) {
console.log(code);
assert.equal( code.indexOf('use asm'), -1 );
},
};
5 changes: 5 additions & 0 deletions test/function/samples/function-directive-not-first/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export function a() {
const x = 1;
"use asm";
return x;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
var assert = require( 'assert' );

module.exports = {
description: 'should delete use strict from function body',
code: function ( code ) {
assert.equal( code.lastIndexOf('use strict'), 1 );
},
show: true,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export function a() {
"use strict";
const x = 1;
return x;
}
22 changes: 22 additions & 0 deletions test/function/samples/module-level-directive/_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
var assert = require( 'assert' );
var path = require( 'path' );

module.exports = {
description: 'module level directives should produce warnings',
warnings: [
{
code: 'MODULE_LEVEL_DIRECTIVE',
message: 'Module level directives cause errors when bundled, \'use asm\' was ignored.',
pos: 0,
id: path.resolve( __dirname, 'main.js' ),
loc: {
file: path.resolve( __dirname, 'main.js' ),
line: 1,
column: 0
},
frame: `
1: \"use asm\";\n ^\n2:\n3: export default 1;
`
}
]
};
3 changes: 3 additions & 0 deletions test/function/samples/module-level-directive/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use asm";

export default 1;

0 comments on commit 407709c

Please sign in to comment.