@jslint-org/jslint 2026.2.28 → 2026.6.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.
- package/CHANGELOG.md +43 -4
- package/README.md +297 -177
- package/jslint.mjs +1546 -1154
- package/package.json +2 -2
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.
|
|
6
|
+
| Branch | [master<br>(v2026.6.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 | [](https://github.com/jslint-org/jslint/actions?query=branch%3Amaster) | [](https://github.com/jslint-org/jslint/actions?query=branch%3Abeta) | [](https://github.com/jslint-org/jslint/actions?query=branch%3Aalpha) |
|
|
9
9
|
| Coverage | [](https://jslint-org.github.io/jslint/branch-master/.artifact/coverage/index.html) | [](https://jslint-org.github.io/jslint/branch-beta/.artifact/coverage/index.html) | [](https://jslint-org.github.io/jslint/branch-alpha/.artifact/coverage/index.html) |
|
|
@@ -41,7 +41,7 @@ Douglas Crockford <douglas@crockford.com>
|
|
|
41
41
|
|
|
42
42
|
9. [Documentation](#documentation)
|
|
43
43
|
- [API Doc](#api-doc)
|
|
44
|
-
- [Directive
|
|
44
|
+
- [Directive](#directive)
|
|
45
45
|
- [`/*jslint beta*/`](#jslint-beta)
|
|
46
46
|
- [`/*jslint bitwise*/`](#jslint-bitwise)
|
|
47
47
|
- [`/*jslint browser*/`](#jslint-browser)
|
|
@@ -62,12 +62,13 @@ Douglas Crockford <douglas@crockford.com>
|
|
|
62
62
|
- [`/*jslint trace*/`](#jslint-trace)
|
|
63
63
|
- [`/*jslint unordered*/`](#jslint-unordered)
|
|
64
64
|
- [`/*jslint white*/`](#jslint-white)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
- [`/*global*/`](#global)
|
|
66
|
+
- [`/*property*/`](#property)
|
|
67
|
+
- [`/*jslint-disable*/.../*jslint-enable*/`](#jslint-disablejslint-enable)
|
|
68
|
+
- [`//jslint-ignore-line`](#jslint-ignore-line)
|
|
69
|
+
- [`/*coverage-disable*/.../*coverage-enable*/`](#coverage-disablecoverage-enable)
|
|
70
|
+
- [`//coverage-ignore-line`](#coverage-ignore-line)
|
|
71
|
+
- [ECMAScript Feature Support](#ecmascript-feature-support)
|
|
71
72
|
|
|
72
73
|
10. [Package Listing](#package-listing)
|
|
73
74
|
|
|
@@ -533,28 +534,9 @@ window.addEventListener("load", function () {
|
|
|
533
534
|
|
|
534
535
|
<br><br>
|
|
535
536
|
# Documentation
|
|
536
|
-
|
|
537
|
-
|
|
538
537
|
- [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
538
|
- [index.html](index.html) runs the jslint.mjs function in a web page.
|
|
541
539
|
|
|
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
540
|
|
|
559
541
|
<br><br>
|
|
560
542
|
### API Doc
|
|
@@ -564,12 +546,11 @@ right so that you can focus your creative energy where it is most needed.
|
|
|
564
546
|
|
|
565
547
|
|
|
566
548
|
<br><br>
|
|
567
|
-
### Directive
|
|
549
|
+
### Directive
|
|
568
550
|
|
|
569
551
|
<br>
|
|
570
552
|
|
|
571
553
|
##### `/*jslint beta*/`
|
|
572
|
-
|
|
573
554
|
```js
|
|
574
555
|
/*jslint beta*/
|
|
575
556
|
// Enable experimental warnings.
|
|
@@ -584,7 +565,6 @@ right so that you can focus your creative energy where it is most needed.
|
|
|
584
565
|
<br>
|
|
585
566
|
|
|
586
567
|
##### `/*jslint bitwise*/`
|
|
587
|
-
|
|
588
568
|
```js
|
|
589
569
|
/*jslint bitwise*/
|
|
590
570
|
// Allow bitwise operator.
|
|
@@ -595,7 +575,6 @@ let foo = 0 | 1;
|
|
|
595
575
|
<br>
|
|
596
576
|
|
|
597
577
|
##### `/*jslint browser*/`
|
|
598
|
-
|
|
599
578
|
```js
|
|
600
579
|
/*jslint browser*/
|
|
601
580
|
// Assume browser environment.
|
|
@@ -606,7 +585,6 @@ localStorage.getItem("foo");
|
|
|
606
585
|
<br>
|
|
607
586
|
|
|
608
587
|
##### `/*jslint convert*/`
|
|
609
|
-
|
|
610
588
|
```js
|
|
611
589
|
/*jslint convert*/
|
|
612
590
|
// Allow conversion operator.
|
|
@@ -618,7 +596,6 @@ let bar = !!0;
|
|
|
618
596
|
<br>
|
|
619
597
|
|
|
620
598
|
##### `/*jslint couch*/`
|
|
621
|
-
|
|
622
599
|
```js
|
|
623
600
|
/*jslint couch*/
|
|
624
601
|
// Assume CouchDb environment.
|
|
@@ -629,7 +606,6 @@ registerType("text-json", "text/json");
|
|
|
629
606
|
<br>
|
|
630
607
|
|
|
631
608
|
##### `/*jslint devel*/`
|
|
632
|
-
|
|
633
609
|
```js
|
|
634
610
|
/*jslint devel*/
|
|
635
611
|
// Allow console.log() and friends.
|
|
@@ -640,7 +616,6 @@ console.log("hello");
|
|
|
640
616
|
<br>
|
|
641
617
|
|
|
642
618
|
##### `/*jslint eval*/`
|
|
643
|
-
|
|
644
619
|
```js
|
|
645
620
|
/*jslint eval*/
|
|
646
621
|
// Allow eval().
|
|
@@ -651,7 +626,6 @@ eval("1");
|
|
|
651
626
|
<br>
|
|
652
627
|
|
|
653
628
|
##### `/*jslint fart*/`
|
|
654
|
-
|
|
655
629
|
```js
|
|
656
630
|
/*jslint fart*/
|
|
657
631
|
// Allow complex fat-arrow.
|
|
@@ -664,7 +638,6 @@ let foo = async ({bar, baz}) => {
|
|
|
664
638
|
<br>
|
|
665
639
|
|
|
666
640
|
##### `/*jslint for*/`
|
|
667
|
-
|
|
668
641
|
```js
|
|
669
642
|
/*jslint for*/
|
|
670
643
|
// Allow for-loop.
|
|
@@ -680,7 +653,6 @@ function foo() {
|
|
|
680
653
|
<br>
|
|
681
654
|
|
|
682
655
|
##### `/*jslint getset*/`
|
|
683
|
-
|
|
684
656
|
```js
|
|
685
657
|
/*jslint getset, this, devel*/
|
|
686
658
|
// Allow get() and set().
|
|
@@ -702,7 +674,6 @@ console.log(foo.getBar); // 1
|
|
|
702
674
|
<br>
|
|
703
675
|
|
|
704
676
|
##### `/*jslint indent2*/`
|
|
705
|
-
|
|
706
677
|
```js
|
|
707
678
|
/*jslint indent2*/
|
|
708
679
|
// Use 2-space indent.
|
|
@@ -715,7 +686,6 @@ function foo() {
|
|
|
715
686
|
<br>
|
|
716
687
|
|
|
717
688
|
##### `/*jslint long*/`
|
|
718
|
-
|
|
719
689
|
```js
|
|
720
690
|
/*jslint long*/
|
|
721
691
|
// Allow long lines.
|
|
@@ -726,7 +696,6 @@ let foo = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
|
726
696
|
<br>
|
|
727
697
|
|
|
728
698
|
##### `/*jslint node*/`
|
|
729
|
-
|
|
730
699
|
```js
|
|
731
700
|
/*jslint node*/
|
|
732
701
|
// Assume Node.js environment.
|
|
@@ -737,7 +706,6 @@ require("fs");
|
|
|
737
706
|
<br>
|
|
738
707
|
|
|
739
708
|
##### `/*jslint nomen*/`
|
|
740
|
-
|
|
741
709
|
```js
|
|
742
710
|
/*jslint nomen*/
|
|
743
711
|
// Allow weird property name.
|
|
@@ -749,7 +717,6 @@ foo._bar = 1;
|
|
|
749
717
|
<br>
|
|
750
718
|
|
|
751
719
|
##### `/*jslint single*/`
|
|
752
|
-
|
|
753
720
|
```js
|
|
754
721
|
/*jslint single*/
|
|
755
722
|
// Allow single-quote strings.
|
|
@@ -760,7 +727,6 @@ let foo = '';
|
|
|
760
727
|
<br>
|
|
761
728
|
|
|
762
729
|
##### `/*jslint subscript*/`
|
|
763
|
-
|
|
764
730
|
```js
|
|
765
731
|
/*jslint subscript*/
|
|
766
732
|
// Allow identifiers in subscript-notation.
|
|
@@ -772,7 +738,6 @@ foo["bar"] = 1;
|
|
|
772
738
|
<br>
|
|
773
739
|
|
|
774
740
|
##### `/*jslint this*/`
|
|
775
|
-
|
|
776
741
|
```js
|
|
777
742
|
/*jslint this*/
|
|
778
743
|
// Allow 'this'.
|
|
@@ -785,7 +750,6 @@ function foo() {
|
|
|
785
750
|
<br>
|
|
786
751
|
|
|
787
752
|
##### `/*jslint trace*/`
|
|
788
|
-
|
|
789
753
|
```js
|
|
790
754
|
/*jslint trace*/
|
|
791
755
|
// Include jslint stack-trace in warnings.
|
|
@@ -815,7 +779,6 @@ Error
|
|
|
815
779
|
<br>
|
|
816
780
|
|
|
817
781
|
##### `/*jslint unordered*/`
|
|
818
|
-
|
|
819
782
|
```js
|
|
820
783
|
/*jslint unordered*/
|
|
821
784
|
// Allow unordered cases, params, properties, variables, and exports.
|
|
@@ -838,7 +801,6 @@ export {
|
|
|
838
801
|
<br>
|
|
839
802
|
|
|
840
803
|
##### `/*jslint white*/`
|
|
841
|
-
|
|
842
804
|
```js
|
|
843
805
|
/*jslint white*/
|
|
844
806
|
// Allow messy whitespace.
|
|
@@ -846,10 +808,9 @@ export {
|
|
|
846
808
|
let foo = 1; let bar = 2;
|
|
847
809
|
```
|
|
848
810
|
|
|
811
|
+
<br>
|
|
849
812
|
|
|
850
|
-
|
|
851
|
-
### Directive `/*global*/`
|
|
852
|
-
|
|
813
|
+
##### `/*global*/`
|
|
853
814
|
```js
|
|
854
815
|
/*global foo, bar*/
|
|
855
816
|
// Declare global variables foo, bar.
|
|
@@ -858,10 +819,9 @@ foo();
|
|
|
858
819
|
bar();
|
|
859
820
|
```
|
|
860
821
|
|
|
822
|
+
<br>
|
|
861
823
|
|
|
862
|
-
|
|
863
|
-
### Directive `/*property*/`
|
|
864
|
-
|
|
824
|
+
##### `/*property*/`
|
|
865
825
|
```js
|
|
866
826
|
/*property foo, bar*/
|
|
867
827
|
// Restrict property-access to only .foo, .bar.
|
|
@@ -869,10 +829,9 @@ bar();
|
|
|
869
829
|
let aa = {bar: 1, foo: 2};
|
|
870
830
|
```
|
|
871
831
|
|
|
832
|
+
<br>
|
|
872
833
|
|
|
873
|
-
|
|
874
|
-
### Directive `/*jslint-disable*/.../*jslint-enable*/`
|
|
875
|
-
|
|
834
|
+
##### `/*jslint-disable*/.../*jslint-enable*/`
|
|
876
835
|
```js
|
|
877
836
|
/*jslint-disable*/
|
|
878
837
|
|
|
@@ -882,20 +841,18 @@ Syntax error.
|
|
|
882
841
|
/*jslint-enable*/
|
|
883
842
|
```
|
|
884
843
|
|
|
844
|
+
<br>
|
|
885
845
|
|
|
886
|
-
|
|
887
|
-
### Directive `//jslint-ignore-line`
|
|
888
|
-
|
|
846
|
+
##### `//jslint-ignore-line`
|
|
889
847
|
```js
|
|
890
848
|
// JSLint will ignore non-fatal warnings at given line.
|
|
891
849
|
|
|
892
850
|
eval("1"); //jslint-ignore-line
|
|
893
851
|
```
|
|
894
852
|
|
|
853
|
+
<br>
|
|
895
854
|
|
|
896
|
-
|
|
897
|
-
### Directive `/*coverage-disable*/.../*coverage-enable*/`
|
|
898
|
-
|
|
855
|
+
##### `/*coverage-disable*/.../*coverage-enable*/`
|
|
899
856
|
```js
|
|
900
857
|
/*coverage-disable*/
|
|
901
858
|
|
|
@@ -908,10 +865,9 @@ if (false) {
|
|
|
908
865
|
/*coverage-enable*/
|
|
909
866
|
```
|
|
910
867
|
|
|
868
|
+
<br>
|
|
911
869
|
|
|
912
|
-
|
|
913
|
-
### Directive `//coverage-ignore-line`
|
|
914
|
-
|
|
870
|
+
##### `//coverage-ignore-line`
|
|
915
871
|
```js
|
|
916
872
|
// JSLint will ignore code-coverage at given line.
|
|
917
873
|
|
|
@@ -921,6 +877,114 @@ if (false) {
|
|
|
921
877
|
```
|
|
922
878
|
|
|
923
879
|
|
|
880
|
+
<br><br>
|
|
881
|
+
### ECMAScript Feature Support
|
|
882
|
+
- https://github.com/tc39/proposals/blob/main/finished-proposals.md
|
|
883
|
+
- https://github.com/lukehoban/es6features
|
|
884
|
+
|
|
885
|
+
| #. | JSLint Support | ES Version | ES Feature |
|
|
886
|
+
|--:|:--|:--|:--|
|
|
887
|
+
| 99. | ❌ | ES2027 | [`Explicit Resource Management`](https://github.com/tc39/proposal-explicit-resource-management) |
|
|
888
|
+
| 98. | ✅ | ES2027 | [`Atomics.pause`](https://github.com/tc39/proposal-atomics-microwait) |
|
|
889
|
+
| 97. | ❌ | ES2027 | [`Joint Iteration`](https://github.com/tc39/proposal-joint-iteration) |
|
|
890
|
+
| 96. | ✅ | ES2027 | [`Temporal`](https://github.com/tc39/proposal-temporal) |
|
|
891
|
+
| 95. | ✅ | ES2026 | [`Upsert`](https://github.com/tc39/proposal-upsert) |
|
|
892
|
+
| 94. | ✅ | ES2026 | [`JSON.parse source text access`](https://github.com/tc39/proposal-json-parse-with-source) |
|
|
893
|
+
| 93. | ❌ | ES2026 | [`Iterator Sequencing`](https://github.com/tc39/proposal-iterator-sequencing) |
|
|
894
|
+
| 92. | ✅ | ES2026 | [`Uint8Array to/from Base64`](https://github.com/tc39/proposal-arraybuffer-base64) |
|
|
895
|
+
| 91. | ✅ | ES2026 | [`Math.sumPrecise`](https://github.com/tc39/proposal-math-sum) |
|
|
896
|
+
| 90. | ✅ | ES2026 | [`Error.isError`](https://github.com/tc39/proposal-is-error) |
|
|
897
|
+
| 89. | ✅ | ES2026 | [`Array.fromAsync`](https://github.com/tc39/proposal-array-from-async) |
|
|
898
|
+
| 88. | ✅ | ES2025 | [`RegExp.escape`](https://github.com/tc39/proposal-regex-escaping) |
|
|
899
|
+
| 87. | ✅ | ES2025 | [`Redeclarable global eval-introduced vars`](https://github.com/tc39/proposal-redeclarable-global-eval-vars) |
|
|
900
|
+
| 86. | ✅ | ES2025 | [`Float16 on TypedArrays, DataView, Math.f16round`](https://github.com/tc39/proposal-float16array) |
|
|
901
|
+
| 85. | ✅ | ES2025 | [`Promise.try`](https://github.com/tc39/proposal-promise-try) |
|
|
902
|
+
| 84. | ❌ | ES2025 | [`Sync Iterator helpers`](https://github.com/tc39/proposal-iterator-helpers) |
|
|
903
|
+
| 83. | ✅ | ES2025 | [`JSON Modules`](https://github.com/tc39/proposal-json-modules) |
|
|
904
|
+
| 82. | ✅ | ES2025 | [`Import Attributes`](https://github.com/tc39/proposal-import-attributes) |
|
|
905
|
+
| 81. | ✅ | ES2025 | [`RegExp Modifiers`](https://github.com/tc39/proposal-regexp-modifiers) |
|
|
906
|
+
| 80. | ✅ | ES2025 | [`New Set methods`](https://github.com/tc39/proposal-set-methods) |
|
|
907
|
+
| 79. | ✅ | ES2025 | [`Duplicate named capture groups`](https://github.com/tc39/proposal-duplicate-named-capturing-groups) |
|
|
908
|
+
| 78. | ✅ | ES2024 | [`ArrayBuffer transfer`](https://github.com/tc39/proposal-arraybuffer-transfer) |
|
|
909
|
+
| 77. | ✅ | ES2024 | [`Promise.withResolvers`](https://github.com/tc39/proposal-promise-with-resolvers) |
|
|
910
|
+
| 76. | ✅ | ES2024 | [`Array Grouping`](https://github.com/tc39/proposal-array-grouping) |
|
|
911
|
+
| 75. | ✅ | ES2024 | [`Resizable and growable ArrayBuffers`](https://github.com/tc39/proposal-resizablearraybuffer) |
|
|
912
|
+
| 74. | ⚠️ | ES2024 | [`RegExp v flag with set notation + properties of strings`](https://github.com/tc39/proposal-regexp-v-flag) |
|
|
913
|
+
| 73. | ✅ | ES2024 | [`Atomics.waitAsync`](https://github.com/tc39/proposal-atomics-wait-async) |
|
|
914
|
+
| 72. | ✅ | ES2024 | [`Well-Formed Unicode Strings`](https://github.com/tc39/proposal-is-usv-string) |
|
|
915
|
+
| 71. | ✅ | ES2023 | [`Change Array by Copy`](https://github.com/tc39/proposal-change-array-by-copy) |
|
|
916
|
+
| 70. | ✅ | ES2023 | [`Symbols as WeakMap keys`](https://github.com/tc39/proposal-symbols-as-weakmap-keys) |
|
|
917
|
+
| 69. | ✅ | ES2023 | [`Hashbang Grammar`](https://github.com/tc39/proposal-hashbang) |
|
|
918
|
+
| 68. | ✅ | ES2023 | [`Array find from last`](https://github.com/tc39/proposal-array-find-from-last) |
|
|
919
|
+
| 67. | ✅ | ES2022 | [`Error Cause`](https://github.com/tc39/proposal-error-cause) |
|
|
920
|
+
| 66. | ❌ | ES2022 | [`Class Static Block`](https://github.com/tc39/proposal-class-static-block) |
|
|
921
|
+
| 65. | ✅ | ES2022 | [`Accessible Object.prototype.hasOwnProperty`](https://github.com/tc39/proposal-accessible-object-hasownproperty) |
|
|
922
|
+
| 64. | ✅ | ES2022 | [`.at()`](https://github.com/tc39/proposal-relative-indexing-method) |
|
|
923
|
+
| 63. | ❌ | ES2022 | [`Ergonomic brand checks for Private Fields`](https://github.com/tc39/proposal-private-fields-in-in) |
|
|
924
|
+
| 62. | ✅ | ES2022 | [`Top-level await`](https://github.com/tc39/proposal-top-level-await) |
|
|
925
|
+
| 61. | ✅ | ES2022 | [`RegExp Match Indices`](https://github.com/tc39/proposal-regexp-match-indices) |
|
|
926
|
+
| 60. | ❌ | ES2022 | [`Class Public Instance Fields & Private Instance Fields`](https://github.com/tc39/proposal-class-fields) |
|
|
927
|
+
| 59. | ✅ | ES2021 | [`Numeric separators`](https://github.com/tc39/proposal-numeric-separator) |
|
|
928
|
+
| 58. | ✅ | ES2021 | [`Logical Assignment Operators`](https://github.com/tc39/proposal-logical-assignment) |
|
|
929
|
+
| 57. | ✅ | ES2021 | [`WeakRefs`](https://github.com/tc39/proposal-weakrefs) |
|
|
930
|
+
| 56. | ✅ | ES2021 | [`Promise.any`](https://github.com/tc39/proposal-promise-any) |
|
|
931
|
+
| 55. | ✅ | ES2021 | [`String.prototype.replaceAll`](https://github.com/tc39/proposal-string-replaceall) |
|
|
932
|
+
| 54. | ✅ | ES2020 | [`import.meta`](https://github.com/tc39/proposal-import-meta) |
|
|
933
|
+
| 53. | ✅ | ES2020 | [`Nullish coalescing Operator`](https://github.com/tc39/proposal-nullish-coalescing) |
|
|
934
|
+
| 52. | ✅ | ES2020 | [`Optional Chaining`](https://github.com/tc39/proposal-optional-chaining) |
|
|
935
|
+
| 51. | ✅ | ES2020 | [`for-in mechanics`](https://github.com/tc39/proposal-for-in-order) |
|
|
936
|
+
| 50. | ✅ | ES2020 | [`globalThis`](https://github.com/tc39/proposal-global) |
|
|
937
|
+
| 49. | ✅ | ES2020 | [`Promise.allSettled`](https://github.com/tc39/proposal-promise-allSettled) |
|
|
938
|
+
| 48. | ✅ | ES2020 | [`BigInt`](https://github.com/tc39/proposal-bigint) |
|
|
939
|
+
| 47. | ✅ | ES2020 | [`import()`](https://github.com/tc39/proposal-dynamic-import) |
|
|
940
|
+
| 46. | ✅ | ES2020 | [`String.prototype.matchAll`](https://github.com/tc39/proposal-string-matchall) |
|
|
941
|
+
| 45. | ✅ | ES2019 | [`Array.prototype.{flat,flatMap}`](https://github.com/tc39/proposal-flatMap) |
|
|
942
|
+
| 44. | ✅ | ES2019 | [`String.prototype.{trimStart,trimEnd}`](https://github.com/tc39/proposal-string-left-right-trim) |
|
|
943
|
+
| 43. | ✅ | ES2019 | [`Well-formed JSON.stringify`](https://github.com/tc39/proposal-well-formed-stringify) |
|
|
944
|
+
| 42. | ✅ | ES2019 | [`Object.fromEntries`](https://github.com/tc39/proposal-object-from-entries) |
|
|
945
|
+
| 41. | ✅ | ES2019 | [`Function.prototype.toString revision`](https://github.com/tc39/Function-prototype-toString-revision) |
|
|
946
|
+
| 40. | ✅ | ES2019 | [`Symbol.prototype.description`](https://github.com/tc39/proposal-Symbol-description) |
|
|
947
|
+
| 39. | ✅ | ES2019 | [`JSON superset`](https://github.com/tc39/proposal-json-superset) |
|
|
948
|
+
| 38. | ✅ | ES2019 | [`Optional catch binding`](https://github.com/tc39/proposal-optional-catch-binding) |
|
|
949
|
+
| 37. | ❌ | ES2018 | [`Asynchronous Iteration`](https://github.com/tc39/proposal-async-iteration) |
|
|
950
|
+
| 36. | ✅ | ES2018 | [`Promise.prototype.finally`](https://github.com/tc39/proposal-promise-finally) |
|
|
951
|
+
| 35. | ✅ | ES2018 | [`RegExp Unicode Property Escapes`](https://github.com/tc39/proposal-regexp-unicode-property-escapes) |
|
|
952
|
+
| 34. | ✅ | ES2018 | [`RegExp Lookbehind Assertions`](https://github.com/tc39/proposal-regexp-lookbehind) |
|
|
953
|
+
| 33. | ✅ | ES2018 | [`Rest/Spread Properties`](https://github.com/tc39/proposal-object-rest-spread) |
|
|
954
|
+
| 32. | ✅ | ES2018 | [`RegExp named capture groups`](https://github.com/tc39/proposal-regexp-named-groups) |
|
|
955
|
+
| 31. | ✅ | ES2018 | [`s (dotAll) flag for regular expressions`](https://github.com/tc39/proposal-regexp-dotall-flag) |
|
|
956
|
+
| 30. | ✅ | ES2018 | [`Lifting template literal restriction`](https://github.com/tc39/proposal-template-literal-revision) |
|
|
957
|
+
| 29. | ✅ | ES2017 | [`Shared memory and atomics`](https://github.com/tc39/proposal-ecmascript-sharedmem) |
|
|
958
|
+
| 28. | ✅ | ES2017 | [`Async functions`](https://github.com/tc39/proposal-async-await) |
|
|
959
|
+
| 27. | ⚠️ | ES2017 | [`Trailing commas in function parameter lists and calls`](https://github.com/tc39/proposal-trailing-function-commas) |
|
|
960
|
+
| 26. | ✅ | ES2017 | [`Object.getOwnPropertyDescriptors`](https://github.com/tc39/proposal-object-getownpropertydescriptors) |
|
|
961
|
+
| 25. | ✅ | ES2017 | [`String padding`](https://github.com/tc39/proposal-string-pad-start-end) |
|
|
962
|
+
| 24. | ✅ | ES2017 | [`Object.values/Object.entries`](https://github.com/tc39/proposal-object-values-entries) |
|
|
963
|
+
| 23. | ✅ | ES2016 | [`Exponentiation operator`](https://github.com/tc39/proposal-exponentiation-operator) |
|
|
964
|
+
| 22. | ✅ | ES2016 | [`Array.prototype.includes`](https://github.com/tc39/proposal-Array.prototype.includes) |
|
|
965
|
+
| 21. | ✅ | ES2015 | [`arrows`](https://github.com/lukehoban/es6features#arrows) |
|
|
966
|
+
| 20. | ❌ | ES2015 | [`classes`](https://github.com/lukehoban/es6features#classes) |
|
|
967
|
+
| 19. | ❌ | ES2015 | [`enhanced object literals`](https://github.com/lukehoban/es6features#enhanced-object-literals) |
|
|
968
|
+
| 18. | ✅ | ES2015 | [`template strings`](https://github.com/lukehoban/es6features#template-strings) |
|
|
969
|
+
| 17. | ✅ | ES2015 | [`destructuring`](https://github.com/lukehoban/es6features#destructuring) |
|
|
970
|
+
| 16. | ✅ | ES2015 | [`default + rest + spread`](https://github.com/lukehoban/es6features#default--rest--spread) |
|
|
971
|
+
| 15. | ✅ | ES2015 | [`let + const`](https://github.com/lukehoban/es6features#let--const) |
|
|
972
|
+
| 14. | ❌ | ES2015 | [`iterators + for..of`](https://github.com/lukehoban/es6features#iterators--forof) |
|
|
973
|
+
| 13. | ❌ | ES2015 | [`generators`](https://github.com/lukehoban/es6features#generators) |
|
|
974
|
+
| 12. | ✅ | ES2015 | [`unicode`](https://github.com/lukehoban/es6features#unicode) |
|
|
975
|
+
| 11. | ⚠️ | ES2015 | [`modules`](https://github.com/lukehoban/es6features#modules) |
|
|
976
|
+
| 10. | ✅ | ES2015 | [`module loaders`](https://github.com/lukehoban/es6features#module-loaders) |
|
|
977
|
+
| 9. | ✅ | ES2015 | [`map + set + weakmap + weakset`](https://github.com/lukehoban/es6features#map--set--weakmap--weakset) |
|
|
978
|
+
| 8. | ✅ | ES2015 | [`proxies`](https://github.com/lukehoban/es6features#proxies) |
|
|
979
|
+
| 7. | ✅ | ES2015 | [`symbols`](https://github.com/lukehoban/es6features#symbols) |
|
|
980
|
+
| 6. | ❌ | ES2015 | [`subclassable built-ins`](https://github.com/lukehoban/es6features#subclassable-built-ins) |
|
|
981
|
+
| 5. | ✅ | ES2015 | [`promises`](https://github.com/lukehoban/es6features#promises) |
|
|
982
|
+
| 4. | ✅ | ES2015 | [`math + number + string + array + object APIs`](https://github.com/lukehoban/es6features#math--number--string--array--object-apis) |
|
|
983
|
+
| 3. | ✅ | ES2015 | [`binary and octal literals`](https://github.com/lukehoban/es6features#binary-and-octal-literals) |
|
|
984
|
+
| 2. | ✅ | ES2015 | [`reflect api`](https://github.com/lukehoban/es6features#reflect-api) |
|
|
985
|
+
| 1. | ✅ | ES2015 | [`tail calls`](https://github.com/lukehoban/es6features#tail-calls) |
|
|
986
|
+
|
|
987
|
+
|
|
924
988
|
<br><br>
|
|
925
989
|
# Package Listing
|
|
926
990
|

|
|
@@ -946,129 +1010,185 @@ if (false) {
|
|
|
946
1010
|
|
|
947
1011
|
<br><br>
|
|
948
1012
|
### pull-request merge
|
|
949
|
-
|
|
950
|
-
-
|
|
951
|
-
|
|
952
|
-
- verify
|
|
953
|
-
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
-
|
|
980
|
-
- `
|
|
981
|
-
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
1013
|
+
1. update `.github/workflows/ci.yml` `.github/workflows/publish.yml` to:
|
|
1014
|
+
- latest nodejs-lts version @ https://nodejs.org/en/about/previous-releases
|
|
1015
|
+
1. update `CHANGELOG.md`
|
|
1016
|
+
- verify `<CHANGELOG.md entry #1>` is most-relevant to pull-request.
|
|
1017
|
+
- run
|
|
1018
|
+
```shell
|
|
1019
|
+
# re-run until version propagates
|
|
1020
|
+
npm run test2
|
|
1021
|
+
|
|
1022
|
+
# update 'PR-xxx' placeholder
|
|
1023
|
+
sh jslint_ci.sh shGithubPrUpdatePrxxx
|
|
1024
|
+
|
|
1025
|
+
# re-run until version propagates
|
|
1026
|
+
sh jslint_ci.sh shGithubPrCreate alpha beta # v20xx.xx.xx
|
|
1027
|
+
|
|
1028
|
+
# squash intermediary commits
|
|
1029
|
+
sh jslint_ci.sh shGitSquashPop __pr_beta_pre "- ci - shGithubPrUpdatePrxxx."
|
|
1030
|
+
|
|
1031
|
+
# squash intermediary commits
|
|
1032
|
+
sh jslint_ci.sh shGithubPrCreate alpha beta # v20xx.xx.xx
|
|
1033
|
+
|
|
1034
|
+
# squash intermediary commits
|
|
1035
|
+
git push . __pr_beta_pre~:__pr_beta_pre -f
|
|
1036
|
+
|
|
1037
|
+
git push upstream alpha -f
|
|
1038
|
+
```
|
|
1039
|
+
- verify ci-success @ https://github.com/kaizhu256/jslint/actions
|
|
1040
|
+
- verify ci-success @ https://github.com/jslint-org/jslint/actions
|
|
1041
|
+
|
|
1042
|
+
1. goto https://github.com/jslint-org/jslint/compare/beta...kaizhu256:jslint:branch-p2026.7.1
|
|
1043
|
+
- click `Create pull request`
|
|
1044
|
+
- input `Add a title *` with: `<CHANGELOG.md entry #1>`
|
|
1045
|
+
- input `Add a description` with:
|
|
1046
|
+
```
|
|
1047
|
+
Fixes #xxx.
|
|
1048
|
+
|
|
1049
|
+
This PR will:
|
|
1050
|
+
<CHANGELOG.md entry #1>
|
|
1051
|
+
|
|
1052
|
+
This PR will additionally:
|
|
1053
|
+
<CHANGELOG.md entry extra>
|
|
1054
|
+
|
|
1055
|
+
<screenshot>
|
|
1056
|
+
```
|
|
1057
|
+
- click `Preview` and review
|
|
1058
|
+
- verify:
|
|
1059
|
+
- base respository: `jslint-org/jslint`
|
|
1060
|
+
- base: `beta`
|
|
1061
|
+
- click `Create pull request`
|
|
1062
|
+
- verify ci-success @ https://github.com/jslint-org/jslint/actions/workflows/on_pull_request.yml
|
|
1063
|
+
|
|
1064
|
+
1. wait awhile before continuing ...
|
|
1065
|
+
- click `Squash and merge`
|
|
1066
|
+
- verify ci-success @ https://github.com/jslint-org/jslint/actions
|
|
1067
|
+
- run
|
|
1068
|
+
```shell
|
|
1069
|
+
sh jslint_ci.sh shGithubPrCleanup
|
|
1070
|
+
|
|
1071
|
+
git push upstream alpha -f
|
|
1072
|
+
```
|
|
1073
|
+
- verify ci-success @ https://github.com/kaizhu256/jslint/actions
|
|
1074
|
+
- verify ci-success @ https://github.com/jslint-org/jslint/actions
|
|
1075
|
+
- click `Delete branch`
|
|
987
1076
|
|
|
988
1077
|
|
|
989
1078
|
<br><br>
|
|
990
1079
|
### branch-master commit
|
|
991
|
-
|
|
992
|
-
-
|
|
993
|
-
|
|
994
|
-
- verify
|
|
995
|
-
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
- click `
|
|
1022
|
-
- `
|
|
1023
|
-
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1080
|
+
1. update `.github/workflows/ci.yml` `.github/workflows/publish.yml` to:
|
|
1081
|
+
- latest nodejs-lts version @ https://nodejs.org/en/about/previous-releases
|
|
1082
|
+
1. update `CHANGELOG.md`
|
|
1083
|
+
- verify `<CHANGELOG.md entry #1>` is most-relevant to pull-request.
|
|
1084
|
+
- run
|
|
1085
|
+
```shell
|
|
1086
|
+
# re-run until version propagates
|
|
1087
|
+
npm run test2
|
|
1088
|
+
|
|
1089
|
+
# update 'PR-xxx' placeholder
|
|
1090
|
+
sh jslint_ci.sh shGithubPrUpdatePrxxx
|
|
1091
|
+
|
|
1092
|
+
# re-run until version propagates
|
|
1093
|
+
sh jslint_ci.sh shGithubPrCreate alpha master # v20xx.xx.xx
|
|
1094
|
+
|
|
1095
|
+
# squash intermediary commits
|
|
1096
|
+
sh jslint_ci.sh shGitSquashPop __pr_master_pre "- ci - shGithubPrUpdatePrxxx."
|
|
1097
|
+
|
|
1098
|
+
# squash intermediary commits
|
|
1099
|
+
sh jslint_ci.sh shGithubPrCreate alpha master # v20xx.xx.xx
|
|
1100
|
+
|
|
1101
|
+
# squash intermediary commits
|
|
1102
|
+
git push . __pr_master_pre~:__pr_master_pre -f
|
|
1103
|
+
|
|
1104
|
+
git push upstream alpha -f
|
|
1105
|
+
```
|
|
1106
|
+
- verify ci-success @ https://github.com/kaizhu256/jslint/actions
|
|
1107
|
+
- verify ci-success @ https://github.com/jslint-org/jslint/actions
|
|
1108
|
+
|
|
1109
|
+
1. goto https://github.com/jslint-org/jslint/compare/beta...kaizhu256:jslint:branch-v2026.6.30
|
|
1110
|
+
- click `Create pull request`
|
|
1111
|
+
- input `Add a title *` with: `# v20yy.mm.dd`
|
|
1112
|
+
- input `Add a description` with:
|
|
1113
|
+
```
|
|
1114
|
+
<CHANGELOG.md entry #1>
|
|
1115
|
+
<CHANGELOG.md entry extra>
|
|
1116
|
+
```
|
|
1117
|
+
- click `Preview` and review
|
|
1118
|
+
- verify:
|
|
1119
|
+
- base respository: `jslint-org/jslint`
|
|
1120
|
+
- base: `beta`
|
|
1121
|
+
- click `Create pull request`
|
|
1122
|
+
- verify ci-success @ https://github.com/jslint-org/jslint/actions/workflows/on_pull_request.yml
|
|
1123
|
+
|
|
1124
|
+
1. wait awhile before continuing ...
|
|
1125
|
+
- click `Squash and merge`
|
|
1126
|
+
- verify ci-success @ https://github.com/jslint-org/jslint/actions
|
|
1127
|
+
- run
|
|
1128
|
+
```shell
|
|
1129
|
+
sh jslint_ci.sh shGithubPrCleanup
|
|
1130
|
+
|
|
1131
|
+
git push upstream alpha -f
|
|
1132
|
+
```
|
|
1133
|
+
- verify ci-success @ https://github.com/kaizhu256/jslint/actions
|
|
1134
|
+
- verify ci-success @ https://github.com/jslint-org/jslint/actions
|
|
1135
|
+
- click `Delete branch`
|
|
1136
|
+
- run
|
|
1137
|
+
```shell
|
|
1138
|
+
git push origin beta:master
|
|
1139
|
+
|
|
1140
|
+
git push upstream beta:master
|
|
1141
|
+
```
|
|
1142
|
+
- verify ci-success @ https://github.com/kaizhu256/jslint/actions
|
|
1143
|
+
- verify ci-success @ https://github.com/jslint-org/jslint/actions
|
|
1028
1144
|
|
|
1029
1145
|
|
|
1030
1146
|
<br><br>
|
|
1031
1147
|
### branch-master publish
|
|
1032
|
-
|
|
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
|
-
|
|
1039
|
-
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
-
|
|
1044
|
-
|
|
1045
|
-
-
|
|
1046
|
-
-
|
|
1047
|
-
-
|
|
1048
|
-
-
|
|
1049
|
-
|
|
1050
|
-
-
|
|
1051
|
-
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
-
|
|
1148
|
+
1. goto https://www.npmjs.com/package/@jslint-org/jslint/access <!--no-validate-->
|
|
1149
|
+
- click `Github Actions`
|
|
1150
|
+
- input `Organization or user*` with: `jslint-org`
|
|
1151
|
+
- input `Repository*` with: `jslint`
|
|
1152
|
+
- input `Workflow filename*` with: `publish.yml`
|
|
1153
|
+
- click `Set up connection` or `Update Package Settings`
|
|
1154
|
+
1.
|
|
1155
|
+
- run
|
|
1156
|
+
```shell
|
|
1157
|
+
git push upstream beta:master
|
|
1158
|
+
```
|
|
1159
|
+
- verify ci-success @ https://github.com/jslint-org/jslint/actions
|
|
1160
|
+
1. goto https://github.com/jslint-org/jslint/releases/new
|
|
1161
|
+
- input `Tag: Select tag` with: `v20yy.mm.dd`
|
|
1162
|
+
- click `Create new tag` and click `Create`
|
|
1163
|
+
- verify correct-year `v20yy.mm.dd`
|
|
1164
|
+
- select `Target: master`
|
|
1165
|
+
- input `Release title` with: `v20yy.mm.dd - <CHANGELOG.md entry #1>`
|
|
1166
|
+
- select `Previous tag: Auto`
|
|
1167
|
+
- click `Generate release notes`
|
|
1168
|
+
- input `Write` with:
|
|
1169
|
+
```
|
|
1170
|
+
<CHANGELOG.md entry #1>
|
|
1171
|
+
<CHANGELOG.md entry extra>
|
|
1172
|
+
|
|
1173
|
+
**Full Changelog**: ...
|
|
1174
|
+
```
|
|
1175
|
+
- click `Preview` and review
|
|
1176
|
+
- click `Latest`
|
|
1177
|
+
- click `Publish release`
|
|
1178
|
+
- verify ci-success @ https://github.com/jslint-org/jslint/actions
|
|
1179
|
+
- verify email-notification `Successfully published @jslint-org/jslint@20yy.mm.dd`
|
|
1060
1180
|
|
|
1061
1181
|
|
|
1062
1182
|
<br><br>
|
|
1063
1183
|
### vscode-jslint publish
|
|
1064
|
-
|
|
1065
|
-
- click `vscode-jslint-20yy.mm.dd.vsix`
|
|
1066
|
-
- click `Raw` to download
|
|
1067
|
-
|
|
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`
|
|
1184
|
+
1. goto https://github.com/jslint-org/jslint/tree/gh-pages/branch-beta/.artifact/jslint_wrapper_vscode
|
|
1185
|
+
- click `vscode-jslint-20yy.mm.dd.vsix`
|
|
1186
|
+
- click `Raw` to download
|
|
1187
|
+
1. goto https://marketplace.visualstudio.com/manage/publishers/jslint
|
|
1188
|
+
- move mouse to version-number, right-click, and select `Update`
|
|
1189
|
+
- upload downloaded file `vscode-jslint-20yy.mm.dd.vsix`
|
|
1190
|
+
- click 'Upload'
|
|
1191
|
+
- verify email-notification `[Succeeded] Extension publish on Visual Studio Marketplace - vscode-jslint`
|
|
1072
1192
|
|
|
1073
1193
|
|
|
1074
1194
|
<!--
|