@jslint-org/jslint 2026.4.30 → 2026.7.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/CHANGELOG.md +75 -5
  2. package/README.md +303 -221
  3. package/jslint.mjs +3353 -2683
  4. package/package.json +1 -1
package/README.md CHANGED
@@ -3,7 +3,7 @@ Douglas Crockford <douglas@crockford.com>
3
3
 
4
4
 
5
5
  # Status
6
- | Branch | [master<br>(v2026.4.30)](https://github.com/jslint-org/jslint/tree/master) | [beta<br>(Web Demo)](https://github.com/jslint-org/jslint/tree/beta) | [alpha<br>(Development)](https://github.com/jslint-org/jslint/tree/alpha) |
6
+ | Branch | [master<br>(v2026.7.30)](https://github.com/jslint-org/jslint/tree/master) | [beta<br>(Web Demo)](https://github.com/jslint-org/jslint/tree/beta) | [alpha<br>(Development)](https://github.com/jslint-org/jslint/tree/alpha) |
7
7
  |--:|:--:|:--:|:--:|
8
8
  | CI | [![ci](https://github.com/jslint-org/jslint/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/jslint-org/jslint/actions?query=branch%3Amaster) | [![ci](https://github.com/jslint-org/jslint/actions/workflows/ci.yml/badge.svg?branch=beta)](https://github.com/jslint-org/jslint/actions?query=branch%3Abeta) | [![ci](https://github.com/jslint-org/jslint/actions/workflows/ci.yml/badge.svg?branch=alpha)](https://github.com/jslint-org/jslint/actions?query=branch%3Aalpha) |
9
9
  | Coverage | [![coverage](https://jslint-org.github.io/jslint/branch-master/.artifact/coverage/coverage_badge.svg)](https://jslint-org.github.io/jslint/branch-master/.artifact/coverage/index.html) | [![coverage](https://jslint-org.github.io/jslint/branch-beta/.artifact/coverage/coverage_badge.svg)](https://jslint-org.github.io/jslint/branch-beta/.artifact/coverage/index.html) | [![coverage](https://jslint-org.github.io/jslint/branch-alpha/.artifact/coverage/coverage_badge.svg)](https://jslint-org.github.io/jslint/branch-alpha/.artifact/coverage/index.html) |
@@ -12,36 +12,46 @@ Douglas Crockford <douglas@crockford.com>
12
12
 
13
13
 
14
14
  <br><br>
15
- # Table of Contents
15
+ # Web Demo
16
+ - https://www.jslint.com
17
+
18
+ [![screenshot](https://jslint-org.github.io/jslint/branch-beta/.artifact/screenshot_browser__2fjslint_2fbranch-beta_2findex.html.png)](https://jslint-org.github.io/jslint/index.html)
19
+
20
+
21
+ <br><br>
22
+ # Web Demo Archived
23
+ - [Web Demo 2020](https://www.jslint.com/branch-v2020.11.6/index.html)
24
+ - [Web Demo 2014 (ES5 only)](https://www.jslint.com/branch-v2014.7.8/jslint.html)
25
+ - [Web Demo 2013 (ES5, CSS, HTML)](https://www.jslint.com/branch-v2013.3.13/jslint.html)
16
26
 
17
- 1. [Web Demo](#web-demo)
18
27
 
19
- 2. [Web Demo Archived](#web-demo-archived)
28
+ <br><br>
29
+ # Table of Contents
20
30
 
21
- 3. [Quickstart Install](#quickstart-install)
31
+ 1. [Quickstart Install](#quickstart-install)
22
32
  - [To install, just download and save https://www.jslint.com/jslint.mjs to file:](#to-install-just-download-and-save-httpswwwjslintcomjslintmjs-to-file)
23
33
  - [To run `jslint.mjs` in shell:](#to-run-jslintmjs-in-shell)
24
34
  - [To import `jslint.mjs` in ES Module environment:](#to-import-jslintmjs-in-es-module-environment)
25
35
  - [To import `jslint.mjs` in CommonJS environment:](#to-import-jslintmjs-in-commonjs-environment)
26
36
  - [To JSLint entire directory in shell:](#to-jslint-entire-directory-in-shell)
27
37
 
28
- 4. [Quickstart JSLint Report](#quickstart-jslint-report)
38
+ 2. [Quickstart JSLint Report](#quickstart-jslint-report)
29
39
  - [To create a JSLint report in shell:](#to-create-a-jslint-report-in-shell)
30
40
  - [To create a JSLint report in javascript:](#to-create-a-jslint-report-in-javascript)
31
41
 
32
- 5. [Quickstart V8 Coverage Report](#quickstart-v8-coverage-report)
42
+ 3. [Quickstart V8 Coverage Report](#quickstart-v8-coverage-report)
33
43
  - [To create V8 coverage report from Node.js / Npm program in shell:](#to-create-v8-coverage-report-from-nodejs--npm-program-in-shell)
34
44
  - [To create V8 coverage report from Node.js / Npm program in javascript:](#to-create-v8-coverage-report-from-nodejs--npm-program-in-javascript)
35
45
 
36
- 6. [Quickstart JSLint in CodeMirror](#quickstart-jslint-in-codemirror)
46
+ 4. [Quickstart JSLint in CodeMirror](#quickstart-jslint-in-codemirror)
37
47
 
38
- 7. [Quickstart JSLint in Vim](#quickstart-jslint-in-vim)
48
+ 5. [Quickstart JSLint in Vim](#quickstart-jslint-in-vim)
39
49
 
40
- 8. [Quickstart JSLint in VSCode](#quickstart-jslint-in-vscode)
50
+ 6. [Quickstart JSLint in VSCode](#quickstart-jslint-in-vscode)
41
51
 
42
- 9. [Documentation](#documentation)
52
+ 7. [Documentation](#documentation)
43
53
  - [API Doc](#api-doc)
44
- - [Directive `/*jslint*/`](#directive-jslint)
54
+ - [Directive](#directive)
45
55
  - [`/*jslint beta*/`](#jslint-beta)
46
56
  - [`/*jslint bitwise*/`](#jslint-bitwise)
47
57
  - [`/*jslint browser*/`](#jslint-browser)
@@ -50,7 +60,6 @@ Douglas Crockford <douglas@crockford.com>
50
60
  - [`/*jslint devel*/`](#jslint-devel)
51
61
  - [`/*jslint eval*/`](#jslint-eval)
52
62
  - [`/*jslint fart*/`](#jslint-fart)
53
- - [`/*jslint for*/`](#jslint-for)
54
63
  - [`/*jslint getset*/`](#jslint-getset)
55
64
  - [`/*jslint indent2*/`](#jslint-indent2)
56
65
  - [`/*jslint long*/`](#jslint-long)
@@ -62,40 +71,27 @@ Douglas Crockford <douglas@crockford.com>
62
71
  - [`/*jslint trace*/`](#jslint-trace)
63
72
  - [`/*jslint unordered*/`](#jslint-unordered)
64
73
  - [`/*jslint white*/`](#jslint-white)
65
- - [Directive `/*global*/`](#directive-global)
66
- - [Directive `/*property*/`](#directive-property)
67
- - [Directive `/*jslint-disable*/.../*jslint-enable*/`](#directive-jslint-disablejslint-enable)
68
- - [Directive `//jslint-ignore-line`](#directive-jslint-ignore-line)
69
- - [Directive `/*coverage-disable*/.../*coverage-enable*/`](#directive-coverage-disablecoverage-enable)
70
- - [Directive `//coverage-ignore-line`](#directive-coverage-ignore-line)
74
+ - [`/*global*/`](#global)
75
+ - [`/*property*/`](#property)
76
+ - [`/*jslint-disable*/.../*jslint-enable*/`](#jslint-disablejslint-enable)
77
+ - [`//jslint-ignore-line`](#jslint-ignore-line)
78
+ - [`/*coverage-disable*/.../*coverage-enable*/`](#coverage-disablecoverage-enable)
79
+ - [`//coverage-ignore-line`](#coverage-ignore-line)
80
+ - [ECMAScript Feature Support](#ecmascript-feature-support)
71
81
 
72
- 10. [Package Listing](#package-listing)
82
+ 8. [Package Listing](#package-listing)
73
83
 
74
- 11. [Changelog](#changelog)
84
+ 9. [Changelog](#changelog)
75
85
 
76
- 12. [License](#license)
86
+ 10. [License](#license)
77
87
 
78
- 13. [Devops Instruction](#devops-instruction)
88
+ 11. [Devops Instruction](#devops-instruction)
79
89
  - [pull-request merge](#pull-request-merge)
80
90
  - [branch-master commit](#branch-master-commit)
81
91
  - [branch-master publish](#branch-master-publish)
82
92
  - [vscode-jslint publish](#vscode-jslint-publish)
83
93
 
84
94
 
85
- <br><br>
86
- # Web Demo
87
- - https://www.jslint.com
88
-
89
- [![screenshot](https://jslint-org.github.io/jslint/branch-beta/.artifact/screenshot_browser__2fjslint_2fbranch-beta_2findex.html.png)](https://jslint-org.github.io/jslint/index.html)
90
-
91
-
92
- <br><br>
93
- # Web Demo Archived
94
- - [Web Demo 2020](https://www.jslint.com/branch-v2020.11.6/index.html)
95
- - [Web Demo 2014 (ES5 only)](https://www.jslint.com/branch-v2014.7.8/jslint.html)
96
- - [Web Demo 2013 (ES5, CSS, HTML)](https://www.jslint.com/branch-v2013.3.13/jslint.html)
97
-
98
-
99
95
  <br><br>
100
96
  # Quickstart Install
101
97
 
@@ -533,28 +529,9 @@ window.addEventListener("load", function () {
533
529
 
534
530
  <br><br>
535
531
  # Documentation
536
-
537
-
538
532
  - [jslint.mjs](jslint.mjs) contains the jslint function. It parses and analyzes a source file, returning an object with information about the file. It can also take an object that sets options.
539
-
540
533
  - [index.html](index.html) runs the jslint.mjs function in a web page.
541
534
 
542
- JSLint can be run anywhere that JavaScript (or Java) can run.
543
-
544
- The place to express yourself in programming is in the quality of your ideas and
545
- the efficiency of their execution. The role of style in programming is the same
546
- as in literature: It makes for better reading. A great writer doesn't express
547
- herself by putting the spaces before her commas instead of after, or by putting
548
- extra spaces inside her parentheses. A great writer will slavishly conform to
549
- some rules of style, and that in no way constrains her power to express herself
550
- creatively. See for example William Strunk's The Elements of Style
551
- [https://www.crockford.com/style.html].
552
-
553
- This applies to programming as well. Conforming to a consistent style improves
554
- readability, and frees you to express yourself in ways that matter. JSLint here
555
- plays the part of a stern but benevolent editor, helping you to get the style
556
- right so that you can focus your creative energy where it is most needed.
557
-
558
535
 
559
536
  <br><br>
560
537
  ### API Doc
@@ -564,12 +541,11 @@ right so that you can focus your creative energy where it is most needed.
564
541
 
565
542
 
566
543
  <br><br>
567
- ### Directive `/*jslint*/`
544
+ ### Directive
568
545
 
569
546
  <br>
570
547
 
571
548
  ##### `/*jslint beta*/`
572
-
573
549
  ```js
574
550
  /*jslint beta*/
575
551
  // Enable experimental warnings.
@@ -584,7 +560,6 @@ right so that you can focus your creative energy where it is most needed.
584
560
  <br>
585
561
 
586
562
  ##### `/*jslint bitwise*/`
587
-
588
563
  ```js
589
564
  /*jslint bitwise*/
590
565
  // Allow bitwise operator.
@@ -595,7 +570,6 @@ let foo = 0 | 1;
595
570
  <br>
596
571
 
597
572
  ##### `/*jslint browser*/`
598
-
599
573
  ```js
600
574
  /*jslint browser*/
601
575
  // Assume browser environment.
@@ -606,7 +580,6 @@ localStorage.getItem("foo");
606
580
  <br>
607
581
 
608
582
  ##### `/*jslint convert*/`
609
-
610
583
  ```js
611
584
  /*jslint convert*/
612
585
  // Allow conversion operator.
@@ -618,7 +591,6 @@ let bar = !!0;
618
591
  <br>
619
592
 
620
593
  ##### `/*jslint couch*/`
621
-
622
594
  ```js
623
595
  /*jslint couch*/
624
596
  // Assume CouchDb environment.
@@ -629,7 +601,6 @@ registerType("text-json", "text/json");
629
601
  <br>
630
602
 
631
603
  ##### `/*jslint devel*/`
632
-
633
604
  ```js
634
605
  /*jslint devel*/
635
606
  // Allow console.log() and friends.
@@ -640,7 +611,6 @@ console.log("hello");
640
611
  <br>
641
612
 
642
613
  ##### `/*jslint eval*/`
643
-
644
614
  ```js
645
615
  /*jslint eval*/
646
616
  // Allow eval().
@@ -651,7 +621,6 @@ eval("1");
651
621
  <br>
652
622
 
653
623
  ##### `/*jslint fart*/`
654
-
655
624
  ```js
656
625
  /*jslint fart*/
657
626
  // Allow complex fat-arrow.
@@ -663,24 +632,7 @@ let foo = async ({bar, baz}) => {
663
632
 
664
633
  <br>
665
634
 
666
- ##### `/*jslint for*/`
667
-
668
- ```js
669
- /*jslint for*/
670
- // Allow for-loop.
671
-
672
- function foo() {
673
- let ii;
674
- for (ii = 0; ii < 10; ii += 1) {
675
- foo();
676
- }
677
- }
678
- ```
679
-
680
- <br>
681
-
682
635
  ##### `/*jslint getset*/`
683
-
684
636
  ```js
685
637
  /*jslint getset, this, devel*/
686
638
  // Allow get() and set().
@@ -702,7 +654,6 @@ console.log(foo.getBar); // 1
702
654
  <br>
703
655
 
704
656
  ##### `/*jslint indent2*/`
705
-
706
657
  ```js
707
658
  /*jslint indent2*/
708
659
  // Use 2-space indent.
@@ -715,7 +666,6 @@ function foo() {
715
666
  <br>
716
667
 
717
668
  ##### `/*jslint long*/`
718
-
719
669
  ```js
720
670
  /*jslint long*/
721
671
  // Allow long lines.
@@ -726,7 +676,6 @@ let foo = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
726
676
  <br>
727
677
 
728
678
  ##### `/*jslint node*/`
729
-
730
679
  ```js
731
680
  /*jslint node*/
732
681
  // Assume Node.js environment.
@@ -737,7 +686,6 @@ require("fs");
737
686
  <br>
738
687
 
739
688
  ##### `/*jslint nomen*/`
740
-
741
689
  ```js
742
690
  /*jslint nomen*/
743
691
  // Allow weird property name.
@@ -749,7 +697,6 @@ foo._bar = 1;
749
697
  <br>
750
698
 
751
699
  ##### `/*jslint single*/`
752
-
753
700
  ```js
754
701
  /*jslint single*/
755
702
  // Allow single-quote strings.
@@ -760,7 +707,6 @@ let foo = '';
760
707
  <br>
761
708
 
762
709
  ##### `/*jslint subscript*/`
763
-
764
710
  ```js
765
711
  /*jslint subscript*/
766
712
  // Allow identifiers in subscript-notation.
@@ -772,7 +718,6 @@ foo["bar"] = 1;
772
718
  <br>
773
719
 
774
720
  ##### `/*jslint this*/`
775
-
776
721
  ```js
777
722
  /*jslint this*/
778
723
  // Allow 'this'.
@@ -785,7 +730,6 @@ function foo() {
785
730
  <br>
786
731
 
787
732
  ##### `/*jslint trace*/`
788
-
789
733
  ```js
790
734
  /*jslint trace*/
791
735
  // Include jslint stack-trace in warnings.
@@ -815,7 +759,6 @@ Error
815
759
  <br>
816
760
 
817
761
  ##### `/*jslint unordered*/`
818
-
819
762
  ```js
820
763
  /*jslint unordered*/
821
764
  // Allow unordered cases, params, properties, variables, and exports.
@@ -838,7 +781,6 @@ export {
838
781
  <br>
839
782
 
840
783
  ##### `/*jslint white*/`
841
-
842
784
  ```js
843
785
  /*jslint white*/
844
786
  // Allow messy whitespace.
@@ -846,10 +788,9 @@ export {
846
788
  let foo = 1; let bar = 2;
847
789
  ```
848
790
 
791
+ <br>
849
792
 
850
- <br><br>
851
- ### Directive `/*global*/`
852
-
793
+ ##### `/*global*/`
853
794
  ```js
854
795
  /*global foo, bar*/
855
796
  // Declare global variables foo, bar.
@@ -858,10 +799,9 @@ foo();
858
799
  bar();
859
800
  ```
860
801
 
802
+ <br>
861
803
 
862
- <br><br>
863
- ### Directive `/*property*/`
864
-
804
+ ##### `/*property*/`
865
805
  ```js
866
806
  /*property foo, bar*/
867
807
  // Restrict property-access to only .foo, .bar.
@@ -869,10 +809,9 @@ bar();
869
809
  let aa = {bar: 1, foo: 2};
870
810
  ```
871
811
 
812
+ <br>
872
813
 
873
- <br><br>
874
- ### Directive `/*jslint-disable*/.../*jslint-enable*/`
875
-
814
+ ##### `/*jslint-disable*/.../*jslint-enable*/`
876
815
  ```js
877
816
  /*jslint-disable*/
878
817
 
@@ -882,20 +821,18 @@ Syntax error.
882
821
  /*jslint-enable*/
883
822
  ```
884
823
 
824
+ <br>
885
825
 
886
- <br><br>
887
- ### Directive `//jslint-ignore-line`
888
-
826
+ ##### `//jslint-ignore-line`
889
827
  ```js
890
828
  // JSLint will ignore non-fatal warnings at given line.
891
829
 
892
830
  eval("1"); //jslint-ignore-line
893
831
  ```
894
832
 
833
+ <br>
895
834
 
896
- <br><br>
897
- ### Directive `/*coverage-disable*/.../*coverage-enable*/`
898
-
835
+ ##### `/*coverage-disable*/.../*coverage-enable*/`
899
836
  ```js
900
837
  /*coverage-disable*/
901
838
 
@@ -908,10 +845,9 @@ if (false) {
908
845
  /*coverage-enable*/
909
846
  ```
910
847
 
848
+ <br>
911
849
 
912
- <br><br>
913
- ### Directive `//coverage-ignore-line`
914
-
850
+ ##### `//coverage-ignore-line`
915
851
  ```js
916
852
  // JSLint will ignore code-coverage at given line.
917
853
 
@@ -921,6 +857,114 @@ if (false) {
921
857
  ```
922
858
 
923
859
 
860
+ <br><br>
861
+ ### ECMAScript Feature Support
862
+ - https://github.com/tc39/proposals/blob/main/finished-proposals.md
863
+ - https://github.com/lukehoban/es6features
864
+
865
+ | #. | JSLint Support | ES Version | ES Feature |
866
+ |--:|:--|:--|:--|
867
+ | 99. | ❌ | ES2027 | [`Explicit Resource Management`](https://github.com/tc39/proposal-explicit-resource-management) |
868
+ | 98. | ✅ | ES2027 | [`Atomics.pause`](https://github.com/tc39/proposal-atomics-microwait) |
869
+ | 97. | ❌ | ES2027 | [`Joint Iteration`](https://github.com/tc39/proposal-joint-iteration) |
870
+ | 96. | ✅ | ES2027 | [`Temporal`](https://github.com/tc39/proposal-temporal) |
871
+ | 95. | ✅ | ES2026 | [`Upsert`](https://github.com/tc39/proposal-upsert) |
872
+ | 94. | ✅ | ES2026 | [`JSON.parse source text access`](https://github.com/tc39/proposal-json-parse-with-source) |
873
+ | 93. | ❌ | ES2026 | [`Iterator Sequencing`](https://github.com/tc39/proposal-iterator-sequencing) |
874
+ | 92. | ✅ | ES2026 | [`Uint8Array to/from Base64`](https://github.com/tc39/proposal-arraybuffer-base64) |
875
+ | 91. | ✅ | ES2026 | [`Math.sumPrecise`](https://github.com/tc39/proposal-math-sum) |
876
+ | 90. | ✅ | ES2026 | [`Error.isError`](https://github.com/tc39/proposal-is-error) |
877
+ | 89. | ✅ | ES2026 | [`Array.fromAsync`](https://github.com/tc39/proposal-array-from-async) |
878
+ | 88. | ✅ | ES2025 | [`RegExp.escape`](https://github.com/tc39/proposal-regex-escaping) |
879
+ | 87. | ✅ | ES2025 | [`Redeclarable global eval-introduced vars`](https://github.com/tc39/proposal-redeclarable-global-eval-vars) |
880
+ | 86. | ✅ | ES2025 | [`Float16 on TypedArrays, DataView, Math.f16round`](https://github.com/tc39/proposal-float16array) |
881
+ | 85. | ✅ | ES2025 | [`Promise.try`](https://github.com/tc39/proposal-promise-try) |
882
+ | 84. | ❌ | ES2025 | [`Sync Iterator helpers`](https://github.com/tc39/proposal-iterator-helpers) |
883
+ | 83. | ✅ | ES2025 | [`JSON Modules`](https://github.com/tc39/proposal-json-modules) |
884
+ | 82. | ✅ | ES2025 | [`Import Attributes`](https://github.com/tc39/proposal-import-attributes) |
885
+ | 81. | ✅ | ES2025 | [`RegExp Modifiers`](https://github.com/tc39/proposal-regexp-modifiers) |
886
+ | 80. | ✅ | ES2025 | [`New Set methods`](https://github.com/tc39/proposal-set-methods) |
887
+ | 79. | ✅ | ES2025 | [`Duplicate named capture groups`](https://github.com/tc39/proposal-duplicate-named-capturing-groups) |
888
+ | 78. | ✅ | ES2024 | [`ArrayBuffer transfer`](https://github.com/tc39/proposal-arraybuffer-transfer) |
889
+ | 77. | ✅ | ES2024 | [`Promise.withResolvers`](https://github.com/tc39/proposal-promise-with-resolvers) |
890
+ | 76. | ✅ | ES2024 | [`Array Grouping`](https://github.com/tc39/proposal-array-grouping) |
891
+ | 75. | ✅ | ES2024 | [`Resizable and growable ArrayBuffers`](https://github.com/tc39/proposal-resizablearraybuffer) |
892
+ | 74. | ⚠️ | ES2024 | [`RegExp v flag with set notation + properties of strings`](https://github.com/tc39/proposal-regexp-v-flag) |
893
+ | 73. | ✅ | ES2024 | [`Atomics.waitAsync`](https://github.com/tc39/proposal-atomics-wait-async) |
894
+ | 72. | ✅ | ES2024 | [`Well-Formed Unicode Strings`](https://github.com/tc39/proposal-is-usv-string) |
895
+ | 71. | ✅ | ES2023 | [`Change Array by Copy`](https://github.com/tc39/proposal-change-array-by-copy) |
896
+ | 70. | ✅ | ES2023 | [`Symbols as WeakMap keys`](https://github.com/tc39/proposal-symbols-as-weakmap-keys) |
897
+ | 69. | ✅ | ES2023 | [`Hashbang Grammar`](https://github.com/tc39/proposal-hashbang) |
898
+ | 68. | ✅ | ES2023 | [`Array find from last`](https://github.com/tc39/proposal-array-find-from-last) |
899
+ | 67. | ✅ | ES2022 | [`Error Cause`](https://github.com/tc39/proposal-error-cause) |
900
+ | 66. | ❌ | ES2022 | [`Class Static Block`](https://github.com/tc39/proposal-class-static-block) |
901
+ | 65. | ✅ | ES2022 | [`Accessible Object.prototype.hasOwnProperty`](https://github.com/tc39/proposal-accessible-object-hasownproperty) |
902
+ | 64. | ✅ | ES2022 | [`.at()`](https://github.com/tc39/proposal-relative-indexing-method) |
903
+ | 63. | ❌ | ES2022 | [`Ergonomic brand checks for Private Fields`](https://github.com/tc39/proposal-private-fields-in-in) |
904
+ | 62. | ✅ | ES2022 | [`Top-level await`](https://github.com/tc39/proposal-top-level-await) |
905
+ | 61. | ✅ | ES2022 | [`RegExp Match Indices`](https://github.com/tc39/proposal-regexp-match-indices) |
906
+ | 60. | ❌ | ES2022 | [`Class Public Instance Fields & Private Instance Fields`](https://github.com/tc39/proposal-class-fields) |
907
+ | 59. | ✅ | ES2021 | [`Numeric separators`](https://github.com/tc39/proposal-numeric-separator) |
908
+ | 58. | ✅ | ES2021 | [`Logical Assignment Operators`](https://github.com/tc39/proposal-logical-assignment) |
909
+ | 57. | ✅ | ES2021 | [`WeakRefs`](https://github.com/tc39/proposal-weakrefs) |
910
+ | 56. | ✅ | ES2021 | [`Promise.any`](https://github.com/tc39/proposal-promise-any) |
911
+ | 55. | ✅ | ES2021 | [`String.prototype.replaceAll`](https://github.com/tc39/proposal-string-replaceall) |
912
+ | 54. | ✅ | ES2020 | [`import.meta`](https://github.com/tc39/proposal-import-meta) |
913
+ | 53. | ✅ | ES2020 | [`Nullish coalescing Operator`](https://github.com/tc39/proposal-nullish-coalescing) |
914
+ | 52. | ✅ | ES2020 | [`Optional Chaining`](https://github.com/tc39/proposal-optional-chaining) |
915
+ | 51. | ✅ | ES2020 | [`for-in mechanics`](https://github.com/tc39/proposal-for-in-order) |
916
+ | 50. | ✅ | ES2020 | [`globalThis`](https://github.com/tc39/proposal-global) |
917
+ | 49. | ✅ | ES2020 | [`Promise.allSettled`](https://github.com/tc39/proposal-promise-allSettled) |
918
+ | 48. | ✅ | ES2020 | [`BigInt`](https://github.com/tc39/proposal-bigint) |
919
+ | 47. | ✅ | ES2020 | [`import()`](https://github.com/tc39/proposal-dynamic-import) |
920
+ | 46. | ✅ | ES2020 | [`String.prototype.matchAll`](https://github.com/tc39/proposal-string-matchall) |
921
+ | 45. | ✅ | ES2019 | [`Array.prototype.{flat,flatMap}`](https://github.com/tc39/proposal-flatMap) |
922
+ | 44. | ✅ | ES2019 | [`String.prototype.{trimStart,trimEnd}`](https://github.com/tc39/proposal-string-left-right-trim) |
923
+ | 43. | ✅ | ES2019 | [`Well-formed JSON.stringify`](https://github.com/tc39/proposal-well-formed-stringify) |
924
+ | 42. | ✅ | ES2019 | [`Object.fromEntries`](https://github.com/tc39/proposal-object-from-entries) |
925
+ | 41. | ✅ | ES2019 | [`Function.prototype.toString revision`](https://github.com/tc39/Function-prototype-toString-revision) |
926
+ | 40. | ✅ | ES2019 | [`Symbol.prototype.description`](https://github.com/tc39/proposal-Symbol-description) |
927
+ | 39. | ✅ | ES2019 | [`JSON superset`](https://github.com/tc39/proposal-json-superset) |
928
+ | 38. | ✅ | ES2019 | [`Optional catch binding`](https://github.com/tc39/proposal-optional-catch-binding) |
929
+ | 37. | ❌ | ES2018 | [`Asynchronous Iteration`](https://github.com/tc39/proposal-async-iteration) |
930
+ | 36. | ✅ | ES2018 | [`Promise.prototype.finally`](https://github.com/tc39/proposal-promise-finally) |
931
+ | 35. | ✅ | ES2018 | [`RegExp Unicode Property Escapes`](https://github.com/tc39/proposal-regexp-unicode-property-escapes) |
932
+ | 34. | ✅ | ES2018 | [`RegExp Lookbehind Assertions`](https://github.com/tc39/proposal-regexp-lookbehind) |
933
+ | 33. | ✅ | ES2018 | [`Rest/Spread Properties`](https://github.com/tc39/proposal-object-rest-spread) |
934
+ | 32. | ✅ | ES2018 | [`RegExp named capture groups`](https://github.com/tc39/proposal-regexp-named-groups) |
935
+ | 31. | ✅ | ES2018 | [`s (dotAll) flag for regular expressions`](https://github.com/tc39/proposal-regexp-dotall-flag) |
936
+ | 30. | ✅ | ES2018 | [`Lifting template literal restriction`](https://github.com/tc39/proposal-template-literal-revision) |
937
+ | 29. | ✅ | ES2017 | [`Shared memory and atomics`](https://github.com/tc39/proposal-ecmascript-sharedmem) |
938
+ | 28. | ✅ | ES2017 | [`Async functions`](https://github.com/tc39/proposal-async-await) |
939
+ | 27. | ⚠️ | ES2017 | [`Trailing commas in function parameter lists and calls`](https://github.com/tc39/proposal-trailing-function-commas) |
940
+ | 26. | ✅ | ES2017 | [`Object.getOwnPropertyDescriptors`](https://github.com/tc39/proposal-object-getownpropertydescriptors) |
941
+ | 25. | ✅ | ES2017 | [`String padding`](https://github.com/tc39/proposal-string-pad-start-end) |
942
+ | 24. | ✅ | ES2017 | [`Object.values/Object.entries`](https://github.com/tc39/proposal-object-values-entries) |
943
+ | 23. | ✅ | ES2016 | [`Exponentiation operator`](https://github.com/tc39/proposal-exponentiation-operator) |
944
+ | 22. | ✅ | ES2016 | [`Array.prototype.includes`](https://github.com/tc39/proposal-Array.prototype.includes) |
945
+ | 21. | ✅ | ES2015 | [`arrows`](https://github.com/lukehoban/es6features#arrows) |
946
+ | 20. | ❌ | ES2015 | [`classes`](https://github.com/lukehoban/es6features#classes) |
947
+ | 19. | ❌ | ES2015 | [`enhanced object literals`](https://github.com/lukehoban/es6features#enhanced-object-literals) |
948
+ | 18. | ✅ | ES2015 | [`template strings`](https://github.com/lukehoban/es6features#template-strings) |
949
+ | 17. | ✅ | ES2015 | [`destructuring`](https://github.com/lukehoban/es6features#destructuring) |
950
+ | 16. | ✅ | ES2015 | [`default + rest + spread`](https://github.com/lukehoban/es6features#default--rest--spread) |
951
+ | 15. | ✅ | ES2015 | [`let + const`](https://github.com/lukehoban/es6features#let--const) |
952
+ | 14. | ⚠️ | ES2015 | [`iterators + for..of`](https://github.com/lukehoban/es6features#iterators--forof) |
953
+ | 13. | ❌ | ES2015 | [`generators`](https://github.com/lukehoban/es6features#generators) |
954
+ | 12. | ✅ | ES2015 | [`unicode`](https://github.com/lukehoban/es6features#unicode) |
955
+ | 11. | ⚠️ | ES2015 | [`modules`](https://github.com/lukehoban/es6features#modules) |
956
+ | 10. | ✅ | ES2015 | [`module loaders`](https://github.com/lukehoban/es6features#module-loaders) |
957
+ | 9. | ✅ | ES2015 | [`map + set + weakmap + weakset`](https://github.com/lukehoban/es6features#map--set--weakmap--weakset) |
958
+ | 8. | ✅ | ES2015 | [`proxies`](https://github.com/lukehoban/es6features#proxies) |
959
+ | 7. | ✅ | ES2015 | [`symbols`](https://github.com/lukehoban/es6features#symbols) |
960
+ | 6. | ❌ | ES2015 | [`subclassable built-ins`](https://github.com/lukehoban/es6features#subclassable-built-ins) |
961
+ | 5. | ✅ | ES2015 | [`promises`](https://github.com/lukehoban/es6features#promises) |
962
+ | 4. | ✅ | ES2015 | [`math + number + string + array + object APIs`](https://github.com/lukehoban/es6features#math--number--string--array--object-apis) |
963
+ | 3. | ✅ | ES2015 | [`binary and octal literals`](https://github.com/lukehoban/es6features#binary-and-octal-literals) |
964
+ | 2. | ✅ | ES2015 | [`reflect api`](https://github.com/lukehoban/es6features#reflect-api) |
965
+ | 1. | ✅ | ES2015 | [`tail calls`](https://github.com/lukehoban/es6features#tail-calls) |
966
+
967
+
924
968
  <br><br>
925
969
  # Package Listing
926
970
  ![screenshot_package_listing.svg](https://jslint-org.github.io/jslint/branch-beta/.artifact/screenshot_package_listing.svg)
@@ -946,129 +990,167 @@ if (false) {
946
990
 
947
991
  <br><br>
948
992
  ### pull-request merge
949
- - find highest issue-number at https://github.com/jslint-org/jslint/issues/, https://github.com/jslint-org/jslint/pulls/, and add +1 to it for PR-xxx
950
- - checkpoint local-branch-beta
951
- - `shGitPullrequest beta beta`
952
- - verify ci-success for origin-branch-alpha
953
- - https://github.com/kaizhu256/jslint/actions
954
- - `git push upstream alpha -f`
955
- - verify ci-success for upstream-branch-alpha
956
- - https://github.com/jslint-org/jslint/actions
957
- - goto https://github.com/jslint-org/jslint/compare/beta...kaizhu256:jslint:branch-p2026.2.16
958
- - click `Create pull request`
959
- - input `Add your description here...` with:
960
- ```
961
- Fixes #xxx.
962
- - <primary-commit-message>
963
-
964
- This PR will ...
965
-
966
- This PR will additionally:
967
- - <secondary-commit-message>
968
- ...
969
-
970
- <screenshot>
971
- ```
972
- - verify `commit into jslint-org:beta`
973
- - click `Create pull request`
974
- - verify ci-success for pull-request
975
- - https://github.com/jslint-org/jslint/actions/workflows/on_pull_request.yml
976
- - wait awhile before continuing ...
977
- - click `Squash and merge`
978
- - verify ci-success for upstream-branch-beta
979
- - https://github.com/jslint-org/jslint/actions
980
- - `shGitPullrequestCleanup`
981
- - verify ci-success for origin-branch-alpha
982
- - https://github.com/kaizhu256/jslint/actions
983
- - `git push upstream alpha -f`
984
- - verify ci-success for upstream-branch-alpha
985
- - https://github.com/jslint-org/jslint/actions
986
- - click `Delete branch`
993
+ 1. update `.github/workflows/ci.yml` `.github/workflows/publish.yml` to:
994
+ - latest nodejs-lts version @ https://nodejs.org/en/about/previous-releases
995
+ 1. update `CHANGELOG.md`
996
+ - verify `<CHANGELOG.md entry #1>` is most-relevant to pull-request.
997
+ - run
998
+ ```shell
999
+ # re-run until version propagates
1000
+ npm run test2
1001
+
1002
+ # update 'PR-xxx' placeholder
1003
+ sh jslint_ci.sh shGithubPrUpdatePrxxx
1004
+
1005
+ # re-run until version propagates
1006
+ sh jslint_ci.sh shGithubPrCreate alpha beta # v20yy.mm.dd __pr_beta_pre
1007
+
1008
+ git push upstream alpha -f
1009
+ ```
1010
+ - verify ci-success @ https://github.com/kaizhu256/jslint/actions
1011
+ - verify ci-success @ https://github.com/jslint-org/jslint/actions
1012
+
1013
+ 1. goto https://github.com/jslint-org/jslint/compare/beta...kaizhu256:jslint:branch-p2026.7.20
1014
+ - click `Create pull request`
1015
+ - input `Add a title *` with: `<CHANGELOG.md entry #1>`
1016
+ - input `Add a description` with:
1017
+ ```
1018
+ Fixes #xxx.
1019
+
1020
+ This PR will:
1021
+ <CHANGELOG.md entry #1>
1022
+
1023
+ This PR will additionally:
1024
+ <CHANGELOG.md entry extra>
1025
+
1026
+ <screenshot>
1027
+ ```
1028
+ - click `Preview` and review
1029
+ - verify:
1030
+ - base respository: `jslint-org/jslint`
1031
+ - base: `beta`
1032
+ - click `Create pull request`
1033
+ - verify ci-success @ https://github.com/jslint-org/jslint/actions/workflows/on_pull_request.yml
1034
+
1035
+ 1. wait awhile before continuing ...
1036
+ - click `Squash and merge`
1037
+ - verify ci-success @ https://github.com/jslint-org/jslint/actions
1038
+ - run
1039
+ ```shell
1040
+ sh jslint_ci.sh shGithubPrCleanup
1041
+
1042
+ git push upstream alpha -f
1043
+ ```
1044
+ - verify ci-success @ https://github.com/kaizhu256/jslint/actions
1045
+ - verify ci-success @ https://github.com/jslint-org/jslint/actions
1046
+ - click `Delete branch`
987
1047
 
988
1048
 
989
1049
  <br><br>
990
1050
  ### branch-master commit
991
- - update ci.yml to latest nodejs-lts
992
- - checkpoint local-branch-beta
993
- - `shGitPullrequest master beta # re-run until version propagates`
994
- - verify ci-success for origin-branch-alpha
995
- - https://github.com/kaizhu256/jslint/actions
996
- - `git push upstream alpha -f`
997
- - verify ci-success for upstream-branch-alpha
998
- - https://github.com/jslint-org/jslint/actions
999
- - goto https://github.com/jslint-org/jslint/compare/beta...kaizhu256:jslint:branch-v2026.4.30
1000
- - click `Create pull request`
1001
- - input `Add a title` with: `# v20yy.mm.dd`
1002
- - input `Add a description` with:
1003
- ```
1004
- - <primary-commit-message>
1005
- - <secondary-commit-message>
1006
- ```
1007
- - verify `commit into jslint-org:beta`
1008
- - click `Create pull request`
1009
- - verify ci-success for pull-request
1010
- - https://github.com/jslint-org/jslint/actions/workflows/on_pull_request.yml
1011
- - wait awhile before continuing ...
1012
- - click `Squash and merge`
1013
- - verify ci-success for upstream-branch-beta
1014
- - https://github.com/jslint-org/jslint/actions
1015
- - `shGitPullrequestCleanup`
1016
- - verify ci-success for origin-branch-alpha
1017
- - https://github.com/kaizhu256/jslint/actions
1018
- - `git push upstream alpha -f`
1019
- - verify ci-success for upstream-branch-alpha
1020
- - https://github.com/jslint-org/jslint/actions
1021
- - click `Delete branch`
1022
- - `git push origin beta:master`
1023
- - verify ci-success for origin-branch-master
1024
- - https://github.com/kaizhu256/jslint/actions
1025
- - `git push upstream beta:master`
1026
- - verify ci-success for upstream-branch-master
1027
- - https://github.com/jslint-org/jslint/actions
1051
+ 1. update `.github/workflows/ci.yml` `.github/workflows/publish.yml` to:
1052
+ - latest nodejs-lts version @ https://nodejs.org/en/about/previous-releases
1053
+ 1. update `CHANGELOG.md`
1054
+ - verify `<CHANGELOG.md entry #1>` is most-relevant to pull-request.
1055
+ - run
1056
+ ```shell
1057
+ # re-run until version propagates
1058
+ npm run test2
1059
+
1060
+ # update 'PR-xxx' placeholder
1061
+ sh jslint_ci.sh shGithubPrUpdatePrxxx
1062
+
1063
+ # re-run until version propagates
1064
+ sh jslint_ci.sh shGithubPrCreate alpha master # v20yy.mm.dd __pr_master_pre
1065
+
1066
+ git push upstream alpha -f
1067
+ ```
1068
+ - verify ci-success @ https://github.com/kaizhu256/jslint/actions
1069
+ - verify ci-success @ https://github.com/jslint-org/jslint/actions
1070
+
1071
+ 1. goto https://github.com/jslint-org/jslint/compare/beta...kaizhu256:jslint:branch-v2026.7.30
1072
+ - click `Create pull request`
1073
+ - input `Add a title *` with: `# v20yy.mm.dd`
1074
+ - input `Add a description` with:
1075
+ ```
1076
+ <CHANGELOG.md entry #1>
1077
+ <CHANGELOG.md entry extra>
1078
+ ```
1079
+ - click `Preview` and review
1080
+ - verify:
1081
+ - base respository: `jslint-org/jslint`
1082
+ - base: `beta`
1083
+ - click `Create pull request`
1084
+ - verify ci-success @ https://github.com/jslint-org/jslint/actions/workflows/on_pull_request.yml
1085
+
1086
+ 1. wait awhile before continuing ...
1087
+ - click `Squash and merge`
1088
+ - verify ci-success @ https://github.com/jslint-org/jslint/actions
1089
+ - run
1090
+ ```shell
1091
+ sh jslint_ci.sh shGithubPrCleanup
1092
+
1093
+ git push upstream alpha -f
1094
+ ```
1095
+ - verify ci-success @ https://github.com/kaizhu256/jslint/actions
1096
+ - verify ci-success @ https://github.com/jslint-org/jslint/actions
1097
+ - click `Delete branch`
1098
+ - run
1099
+ ```shell
1100
+ git push origin beta:master
1101
+
1102
+ git push upstream beta:master
1103
+ ```
1104
+ - verify ci-success @ https://github.com/kaizhu256/jslint/actions
1105
+ - verify ci-success @ https://github.com/jslint-org/jslint/actions
1028
1106
 
1029
1107
 
1030
1108
  <br><br>
1031
1109
  ### branch-master publish
1032
- - goto https://www.npmjs.com/package/@jslint-org/jslint/access <!--no-validate-->
1033
- - click `Github Actions`
1034
- - input `Organization or user*` with: `jslint-org`
1035
- - input `Repository*` with: `jslint`
1036
- - input `Workflow filename*` with: `publish.yml`
1037
- - click `Set up connection` or `Update Package Settings`
1038
- - `git push upstream beta:master`
1039
- - verify ci-success for upstream-branch-master
1040
- - https://github.com/jslint-org/jslint/actions
1041
- - goto https://github.com/jslint-org/jslint/releases/new
1042
- - input `Choose a tag` with: `v20yy.mm.dd`
1043
- - click `Create new tag: v20yy.mm.dd on publish`
1044
- - verify correct-year `20yy`
1045
- - select `Target: master`
1046
- - select `Previous tag:auto`
1047
- - input `Release title` with: `v20yy.mm.dd - <primary-commit-message>`
1048
- - input `Describe this release` with:
1049
- ```
1050
- - <primary-commit-message>
1051
- - <secondary-commit-message>
1052
- ```
1053
- - click `Generate release notes`
1054
- - click `Set as the latest release`
1055
- - click `Preview` and review
1056
- - click `Publish release`
1057
- - verify ci-success for upstream-branch-publish
1058
- - https://github.com/jslint-org/jslint/actions
1059
- - verify email-notification `Successfully published @jslint-org/jslint@20yy.mm.dd`
1110
+ 1. goto https://www.npmjs.com/package/@jslint-org/jslint/access <!--no-validate-->
1111
+ - click `Github Actions`
1112
+ - input `Organization or user*` with: `jslint-org`
1113
+ - input `Repository*` with: `jslint`
1114
+ - input `Workflow filename*` with: `publish.yml`
1115
+ - click `Set up connection` or `Update Package Settings`
1116
+ 1.
1117
+ - run
1118
+ ```shell
1119
+ git push upstream beta:master
1120
+ ```
1121
+ - verify ci-success @ https://github.com/jslint-org/jslint/actions
1122
+ 1. goto https://github.com/jslint-org/jslint/releases/new
1123
+ - input `Tag: Select tag` with: `v20yy.mm.dd`
1124
+ - click `Create new tag` and click `Create`
1125
+ - verify correct-year `v20yy.mm.dd`
1126
+ - select `Target: master`
1127
+ - input `Release title` with: `v20yy.mm.dd - <CHANGELOG.md entry #1>`
1128
+ - select `Previous tag: Auto`
1129
+ - click `Generate release notes`
1130
+ - input `Write` with:
1131
+ ```
1132
+ <CHANGELOG.md entry #1>
1133
+ <CHANGELOG.md entry extra>
1134
+
1135
+ **Full Changelog**: ...
1136
+ ```
1137
+ - click `Preview` and review
1138
+ - click `Latest`
1139
+ - click `Publish release`
1140
+ - verify ci-success @ https://github.com/jslint-org/jslint/actions
1141
+ - verify email-notification `Successfully published @jslint-org/jslint@20yy.mm.dd`
1060
1142
 
1061
1143
 
1062
1144
  <br><br>
1063
1145
  ### vscode-jslint publish
1064
- - goto https://github.com/jslint-org/jslint/tree/gh-pages/branch-beta/.artifact/jslint_wrapper_vscode
1065
- - click `vscode-jslint-20yy.mm.dd.vsix`
1066
- - click `Raw` to download
1067
- - goto https://marketplace.visualstudio.com/manage/publishers/jslint
1068
- - right-click `Update`
1069
- - upload downloaded file `vscode-jslint-20yy.mm.dd.vsix`
1070
- - click 'Upload'
1071
- - verify email-notification `[Succeeded] Extension publish on Visual Studio Marketplace - vscode-jslint`
1146
+ 1. goto https://github.com/jslint-org/jslint/tree/gh-pages/branch-beta/.artifact/jslint_wrapper_vscode
1147
+ - click `vscode-jslint-20yy.mm.dd.vsix`
1148
+ - click `Raw` to download
1149
+ 1. goto https://marketplace.visualstudio.com/manage/publishers/jslint
1150
+ - move mouse to version-number, right-click, and select `Update`
1151
+ - upload downloaded file `vscode-jslint-20yy.mm.dd.vsix`
1152
+ - click 'Upload'
1153
+ - verify email-notification `[Succeeded] Extension publish on Visual Studio Marketplace - vscode-jslint`
1072
1154
 
1073
1155
 
1074
1156
  <!--