@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.
Files changed (4) hide show
  1. package/CHANGELOG.md +43 -4
  2. package/README.md +297 -177
  3. package/jslint.mjs +1546 -1154
  4. 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.2.28)](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.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 | [![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) |
@@ -41,7 +41,7 @@ Douglas Crockford <douglas@crockford.com>
41
41
 
42
42
  9. [Documentation](#documentation)
43
43
  - [API Doc](#api-doc)
44
- - [Directive `/*jslint*/`](#directive-jslint)
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
- - [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)
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 `/*jslint*/`
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
- <br><br>
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
- <br><br>
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
- <br><br>
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
- <br><br>
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
- <br><br>
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
- <br><br>
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
  ![screenshot_package_listing.svg](https://jslint-org.github.io/jslint/branch-beta/.artifact/screenshot_package_listing.svg)
@@ -946,129 +1010,185 @@ if (false) {
946
1010
 
947
1011
  <br><br>
948
1012
  ### 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`
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
- - 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.2.1-beta
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
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
- - 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`
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
- - 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`
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
  <!--