Skip to content

Commit

Permalink
Merge branch 'NaridaL-class-name-not-changed' into release-0.56.5
Browse files Browse the repository at this point in the history
# Conflicts:
#	src/ast/nodes/ClassDeclaration.ts
#	src/finalisers/es.ts
  • Loading branch information
lukastaegert committed Mar 7, 2018
2 parents fa15596 + 35f44a7 commit da868fe
Show file tree
Hide file tree
Showing 16 changed files with 142 additions and 3 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# rollup changelog

## 0.56.5
* Convert code style via prettier ([#2031](https://github.com/rollup/rollup/pull/2031))
* Preserve ids when deconflicting classes ([#2025](https://github.com/rollup/rollup/pull/2025))
* Fix an issue with re-exported namespace imports ([#2034](https://github.com/rollup/rollup/pull/2034))
* Convert code style via prettier ([#2031](https://github.com/rollup/rollup/pull/2031))
* Fix links in documentation ([#2026](https://github.com/rollup/rollup/pull/2026))

## 0.56.4
Expand Down
7 changes: 7 additions & 0 deletions src/ast/nodes/ClassDeclaration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@ export default class ClassDeclaration extends ClassNode {
` exports('${this.id.variable.exportName}', ${this.id.variable.getName()});`
);
}
if (this.id) {
const name = this.id.variable.getName();
if (name !== this.id.variable.name) {
code.appendRight(this.start, `let ${this.id.variable.safeName} = `);
code.prependLeft(this.end, ';');
}
}
super.render(code, options);
}
}
9 changes: 8 additions & 1 deletion src/ast/nodes/Identifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
import { NodeType } from './NodeType';
import AssignmentExpression from './AssignmentExpression';
import UpdateExpression from './UpdateExpression';
import ClassDeclaration from './ClassDeclaration';
import { RenderOptions } from '../../utils/renderHelpers';

export function isIdentifier(node: Node): node is Identifier {
Expand Down Expand Up @@ -162,7 +163,13 @@ export default class Identifier extends NodeBase {
if (this.variable) {
const name = this.variable.getName();

if (name !== this.name) {
if (
name !== this.name &&
!(
this.parent.type === NodeType.ClassDeclaration &&
(<ClassDeclaration>this.parent).id === this
)
) {
code.overwrite(this.start, this.end, name, {
storeName: true,
contentOnly: false
Expand Down
5 changes: 4 additions & 1 deletion src/finalisers/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,10 @@ export default function es(
output += '\n';
}
if (namespaceReexport) {
if (!imports || !imports.some(specifier => specifier.imported === '*' && specifier.local === name))
if (
!imports ||
!imports.some(specifier => specifier.imported === '*' && specifier.local === name)
)
output += `import * as ${name} from '${getPath(id)}';\n`;
output += `export { ${
name === namespaceReexport.reexported
Expand Down
3 changes: 3 additions & 0 deletions test/form/samples/class-name-not-changed/MyClass.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export class MyClass {
constructor() { }
}
4 changes: 4 additions & 0 deletions test/form/samples/class-name-not-changed/_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
description: 'class name should not be changed, even if symbol is renamed',
options: { output: { name: 'myBundle' } }
};
17 changes: 17 additions & 0 deletions test/form/samples/class-name-not-changed/_expected/amd.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
define(['exports'], function (exports) { 'use strict';

class MyClass {
constructor() { }
}

let MyClass$1 = class MyClass {
constructor() { }
}; /* comment */ functionCall();
assert.equal(MyClass$1.name, "MyClass"); // oops

exports.MyClass = MyClass$1;
exports.MyClass2 = MyClass;

Object.defineProperty(exports, '__esModule', { value: true });

});
15 changes: 15 additions & 0 deletions test/form/samples/class-name-not-changed/_expected/cjs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

class MyClass {
constructor() { }
}

let MyClass$1 = class MyClass {
constructor() { }
}; /* comment */ functionCall();
assert.equal(MyClass$1.name, "MyClass"); // oops

exports.MyClass = MyClass$1;
exports.MyClass2 = MyClass;
10 changes: 10 additions & 0 deletions test/form/samples/class-name-not-changed/_expected/es.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class MyClass {
constructor() { }
}

let MyClass$1 = class MyClass {
constructor() { }
}; /* comment */ functionCall();
assert.equal(MyClass$1.name, "MyClass"); // oops

export { MyClass$1 as MyClass, MyClass as MyClass2 };
18 changes: 18 additions & 0 deletions test/form/samples/class-name-not-changed/_expected/iife.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
var myBundle = (function (exports) {
'use strict';

class MyClass {
constructor() { }
}

let MyClass$1 = class MyClass {
constructor() { }
}; /* comment */ functionCall();
assert.equal(MyClass$1.name, "MyClass"); // oops

exports.MyClass = MyClass$1;
exports.MyClass2 = MyClass;

return exports;

}({}));
17 changes: 17 additions & 0 deletions test/form/samples/class-name-not-changed/_expected/system.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
System.register([], function (exports, module) {
'use strict';
return {
execute: function () {

class MyClass {
constructor() { }
} exports('MyClass2', MyClass);

let MyClass$1 = class MyClass {
constructor() { }
}; exports('MyClass', MyClass$1); /* comment */ functionCall();
assert.equal(MyClass$1.name, "MyClass"); // oops

}
};
});
21 changes: 21 additions & 0 deletions test/form/samples/class-name-not-changed/_expected/umd.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.myBundle = {})));
}(this, (function (exports) { 'use strict';

class MyClass {
constructor() { }
}

let MyClass$1 = class MyClass {
constructor() { }
}; /* comment */ functionCall();
assert.equal(MyClass$1.name, "MyClass"); // oops

exports.MyClass = MyClass$1;
exports.MyClass2 = MyClass;

Object.defineProperty(exports, '__esModule', { value: true });

})));
5 changes: 5 additions & 0 deletions test/form/samples/class-name-not-changed/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export class MyClass {
constructor() { }
} /* comment */ functionCall()
assert.equal(MyClass.name, "MyClass") // oops
export { MyClass as MyClass2 } from "./MyClass"
3 changes: 3 additions & 0 deletions test/function/samples/class-name-not-changed/MyClass.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export class MyClass {
constructor() { }
}
3 changes: 3 additions & 0 deletions test/function/samples/class-name-not-changed/_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
description: 'class name should not be changed, even if symbol is renamed'
};
5 changes: 5 additions & 0 deletions test/function/samples/class-name-not-changed/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export class MyClass {
constructor() { }
}
assert.equal(MyClass.name, "MyClass") // oops
export { MyClass as MyClass2 } from "./MyClass"

0 comments on commit da868fe

Please sign in to comment.