[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 4787b5f 09/31: Merge pull request #363 from XeCycle/class-
From: |
Dmitry Gutov |
Subject: |
[elpa] master 4787b5f 09/31: Merge pull request #363 from XeCycle/class-public-field |
Date: |
Fri, 21 Jul 2017 09:04:55 -0400 (EDT) |
branch: master
commit 4787b5f2b8dbc1a8f8620c374402aa347e311527
Merge: 71416f6 9ce2542
Author: Dmitry Gutov <address@hidden>
Commit: GitHub <address@hidden>
Merge pull request #363 from XeCycle/class-public-field
Add support for ES7 class public fields
---
js2-mode.el | 28 ++++++++++++++++------------
tests/parser.el | 10 ++++++++++
2 files changed, 26 insertions(+), 12 deletions(-)
diff --git a/js2-mode.el b/js2-mode.el
index d18455d..24be8e8 100644
--- a/js2-mode.el
+++ b/js2-mode.el
@@ -10890,7 +10890,7 @@ expression)."
;; Found a key/value property (of any sort)
((member tt (list js2-NAME js2-STRING js2-NUMBER js2-LB))
(setq after-comma nil
- elem (js2-parse-named-prop tt previous-token))
+ elem (js2-parse-named-prop tt previous-token class-p))
(if (and (null elem)
(not js2-recover-from-parse-errors))
(setq continue nil)))
@@ -10949,7 +10949,7 @@ expression)."
(js2-must-match js2-RC "msg.no.brace.prop")
(nreverse elems)))
-(defun js2-parse-named-prop (tt previous-token)
+(defun js2-parse-named-prop (tt previous-token &optional class-p)
"Parse a name, string, or getter/setter object property.
When `js2-is-in-destructuring' is t, forms like {a, b, c} will be permitted."
(let ((key (js2-parse-prop-name tt))
@@ -10972,17 +10972,18 @@ When `js2-is-in-destructuring' is t, forms like {a,
b, c} will be permitted."
;; highlight function name properties
(js2-record-face 'font-lock-function-name-face))
(js2-parse-method-prop pos key property-type))
- ;; binding element with initializer
+ ;; class field or binding element with initializer
((and (= (js2-peek-token) js2-ASSIGN)
(>= js2-language-version 200))
- (if (not js2-is-in-destructuring)
+ (if (not (or class-p
+ js2-is-in-destructuring))
(js2-report-error "msg.init.no.destruct"))
(js2-parse-initialized-binding key))
;; regular prop
(t
(let ((beg (js2-current-token-beg))
(end (js2-current-token-end))
- (expr (js2-parse-plain-property key)))
+ (expr (js2-parse-plain-property key class-p)))
(when (and (= tt js2-NAME)
(not js2-is-in-destructuring)
js2-highlight-external-variables
@@ -11024,20 +11025,22 @@ When `js2-is-in-destructuring' is t, forms like {a,
b, c} will be permitted."
;; Anything else is an error
(t (js2-report-error "msg.bad.prop"))))
-(defun js2-parse-plain-property (prop)
+(defun js2-parse-plain-property (prop &optional class-p)
"Parse a non-getter/setter property in an object literal.
PROP is the node representing the property: a number, name,
string or expression."
- (let* ((tt (js2-get-token))
+ (let* (tt
(pos (js2-node-pos prop))
colon expr result)
(cond
- ;; Abbreviated property, as in {foo, bar}
+ ;; Abbreviated property, as in {foo, bar} or class {a; b}
((and (>= js2-language-version 200)
- (or (= tt js2-COMMA)
- (= tt js2-RC))
- (not (js2-number-node-p prop)))
- (js2-unget-token)
+ (if class-p
+ (and (setq tt (js2-peek-token-or-eol))
+ (member tt (list js2-EOL js2-RC js2-SEMI)))
+ (and (setq tt (js2-peek-token))
+ (member tt (list js2-COMMA js2-RC))
+ (js2-name-node-p prop))))
(setq result (make-js2-object-prop-node
:pos pos
:left prop
@@ -11048,6 +11051,7 @@ string or expression."
result)
;; Normal property
(t
+ (setq tt (js2-get-token))
(if (= tt js2-COLON)
(setq colon (- (js2-current-token-beg) pos)
expr (js2-parse-assign-expr))
diff --git a/tests/parser.el b/tests/parser.el
index ead7a88..371ad4c 100644
--- a/tests/parser.el
+++ b/tests/parser.el
@@ -946,6 +946,16 @@ the test."
(js2-deftest-parse exponentiation-prohibits-unary-op
"var a = -b ** c" :syntax-error "b")
+(js2-deftest-parse parse-class-public-field-with-init
+ "class C {\n x = 42;\n y = 24;\n \"z\" = 1\n 456 = 789\n}"
+ :reference "class C {\n x = 42\n y = 24\n \"z\" = 1\n 456 = 789\n}")
+
+(js2-deftest-parse parse-class-public-field-no-init
+ "class C {\n x\n y\n \"z\"\n 456\n}")
+
+(js2-deftest-parse parse-class-public-field-computed
+ "class C {\n [a + b] = c\n}")
+
;;; Scopes
(js2-deftest ast-symbol-table-includes-fn-node "function foo() {}"
- [elpa] master updated (a69e424 -> 231ac7f), Dmitry Gutov, 2017/07/21
- [elpa] master da4793e 02/31: ignored warning support, Dmitry Gutov, 2017/07/21
- [elpa] master faf73e8 03/31: Merge pull request #404 from jordonbiondo/feature/ignore-warnings, Dmitry Gutov, 2017/07/21
- [elpa] master 0b09004 04/31: Drop msg.yield.parenthesized error, Dmitry Gutov, 2017/07/21
- [elpa] master 9b20642 01/31: Add support for /*jslint*/ declarations, Dmitry Gutov, 2017/07/21
- [elpa] master 8d05bb7 05/31: yield should not end a return statement, Dmitry Gutov, 2017/07/21
- [elpa] master bb6c388 06/31: ES6 yield is followed by AssignmentExpression, Dmitry Gutov, 2017/07/21
- [elpa] master 32f9782 12/31: Remove js2-mark-safe-local, it's unused now, Dmitry Gutov, 2017/07/21
- [elpa] master 71416f6 08/31: Merge pull request #366 from XeCycle/drop-yield-paren, Dmitry Gutov, 2017/07/21
- [elpa] master 4787b5f 09/31: Merge pull request #363 from XeCycle/class-public-field,
Dmitry Gutov <=
- [elpa] master cb8607c 25/31: Add failing test for issue #420, Dmitry Gutov, 2017/07/21
- [elpa] master 908395e 11/31: Allow trailing comma in param list (#410), Dmitry Gutov, 2017/07/21
- [elpa] master 659f683 14/31: Merge pull request #421 from raxod502/feat/C-M-j, Dmitry Gutov, 2017/07/21
- [elpa] master 8a5f492 20/31: Merge pull request #425 from shicks/jsdoc, Dmitry Gutov, 2017/07/21
- [elpa] master d3b31ba 10/31: js2-node-qname-component: Nandle computed properties, Dmitry Gutov, 2017/07/21
- [elpa] master 4a87822 13/31: Map C-M-j to js2-line-break, Dmitry Gutov, 2017/07/21
- [elpa] master ca7df5b 16/31: Merge branch 'master' of github.com:mooz/js2-mode, Dmitry Gutov, 2017/07/21
- [elpa] master b3f74f0 19/31: Fix jsdoc highlighting for tags w/ optional braces, Dmitry Gutov, 2017/07/21
- [elpa] master 9ce2542 07/31: Add support for ES7 class public fields, Dmitry Gutov, 2017/07/21
- [elpa] master 7349309 21/31: Add tests for `/*jslint*/` declarations, Dmitry Gutov, 2017/07/21