Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve syntax error for class fields in ambient context #12108

Merged
merged 2 commits into from Sep 26, 2020

Conversation

sosukesuzuki
Copy link
Member

@sosukesuzuki sosukesuzuki commented Sep 25, 2020

Q                       A
Fixed Issues? N/A
Patch: Bug Fix? Y
Major: Breaking Change? N
Minor: New Feature? N
Tests Added + Pass? Yes
Documentation PR Link
Any Dependency Changes?
License MIT
  • Throws a syntax error for any class field in ambient context like below:
declare module m {
  class C {
    field = "field";
  }
}
  • Modify the error message to match TypeScript
    • before: 'declare' class fields cannot have an initializer
    • after: Initializers are not allowed in ambient contexts.

@babel-bot
Copy link
Collaborator

babel-bot commented Sep 25, 2020

Build successful! You can test your changes in the REPL here: https://babeljs.io/repl/build/28854/

@codesandbox-ci
Copy link

codesandbox-ci bot commented Sep 25, 2020

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

Latest deployment of this branch, based on commit 05ad22c:

Sandbox Source
babel-repl-custom-plugin Configuration
babel-plugin-multi-config Configuration

@existentialism existentialism added PR: Bug Fix 🐛 A type of pull request used for our changelog categories area: typescript pkg: parser labels Sep 25, 2020
@@ -2289,7 +2289,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
parseClassProperty(node: N.ClassProperty): N.ClassProperty {
this.parseClassPropertyAnnotation(node);

if (node.declare && this.match(tt.eq)) {
if ((node.declare || this.state.isDeclareContext) && this.match(tt.eq)) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does node.declare imply this.state.isDeclareContext? If so we can remove node.declare checks.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, this.state.isDeclareContext is not for class member with declare modifier.

EDIT:
I've fixed to use this.isDeclareContext for class member with declare modifier at 05ad22c.

@JLHwung JLHwung merged commit 39a1267 into babel:main Sep 26, 2020
@sosukesuzuki sosukesuzuki deleted the improve-error-for-ambient branch September 28, 2020 05:51
sosukesuzuki added a commit to sosukesuzuki/prettier that referenced this pull request Oct 15, 2020
sosukesuzuki added a commit to prettier/prettier that referenced this pull request Oct 20, 2020
* Install babel/parser 7.12

* Add tests for babel/babel#12161

* Add test for babel/babel#12076

* Add test for babel/babel#12085

* Add test for babel/babel#12108

* Add test for babel/babel#12120

* Add test for babel/babel#12054

* Add test for babel/babel#12061

* Add test babel/babel#12093

* Add test for babel/babel#12065

* Add test for babel/babel#12111

* Add test for babel/babel#12072

* Switch syntax-module-attributes to syntax-import-assertion

* Support "String import/export specifier"

* Remove tests for module-attributes

* Add changelog

* Update to 7.12.3

* Fix by linter

* Fix by spellchecker

* Add tests for module attributes to errors

* Add error test for module string name with import

* Remove TSTypeCastExpression

* Add tests for funny import-assertions

* Update snapshots|

* Add more tests
@github-actions github-actions bot added the outdated A closed issue/PR that is archived due to age. Recommended to make a new issue label Dec 29, 2020
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Dec 29, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area: errors area: typescript outdated A closed issue/PR that is archived due to age. Recommended to make a new issue pkg: parser PR: Bug Fix 🐛 A type of pull request used for our changelog categories
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants