Top Related Projects
JSLint, The JavaScript Code Quality and Coverage Tool
Find and fix problems in your JavaScript code.
JSHint is a tool that helps to detect errors and potential problems in your JavaScript code
🌟 JavaScript Style Guide, with linter & automatic code fixer
Prettier is an opinionated code formatter.
JavaScript Style Guide
Quick Overview
JSLint is a static code analysis tool for JavaScript, created by Douglas Crockford. It scans JavaScript code for potential errors, coding style violations, and suspicious constructs, helping developers write cleaner and more reliable code.
Pros
- Helps maintain consistent coding style across projects
- Identifies potential errors and problematic patterns early in development
- Encourages best practices and safer coding habits
- Can be integrated into various development environments and build processes
Cons
- Some developers find its rules too strict or opinionated
- May require configuration adjustments to fit specific project needs
- Can produce false positives in certain scenarios
- Limited customization options compared to some other linting tools
Code Examples
- Basic usage:
// Assuming JSLint is available as a global function
var source = "var x = 1; // This is a comment";
var result = JSLINT(source);
if (result) {
console.log("No errors found.");
} else {
console.log("Errors found:");
console.log(JSLINT.errors);
}
- Using JSLint with Node.js:
const jslint = require('jslint');
const source = "function add(a, b) { return a + b; }";
const options = { node: true };
const result = jslint(source, options);
if (result.ok) {
console.log("No errors found.");
} else {
console.log("Errors found:", result.warnings);
}
- Configuring JSLint options:
// Set JSLint options
JSLINT.config({
browser: true,
devel: true,
plusplus: true
});
var source = "for (var i = 0; i < 10; i++) { console.log(i); }";
var result = JSLINT(source);
console.log(result ? "No errors" : "Errors found");
Getting Started
To use JSLint in your project:
-
Install JSLint via npm:
npm install jslint
-
Create a JavaScript file (e.g.,
lint.js
) with the following content:const jslint = require('jslint'); const fs = require('fs'); const source = fs.readFileSync('your-file.js', 'utf8'); const result = jslint(source); if (result.ok) { console.log("No errors found."); } else { console.log("Errors found:"); result.warnings.forEach(warning => { console.log(`Line ${warning.line}: ${warning.message}`); }); }
-
Run the linter:
node lint.js
This will lint the specified file and output any errors or warnings found by JSLint.
Competitor Comparisons
JSLint, The JavaScript Code Quality and Coverage Tool
Pros of jslint
- More actively maintained with recent updates
- Includes additional features and improvements
- Better documentation and examples
Cons of jslint
- Potentially less stable due to frequent changes
- May have compatibility issues with older projects
- Steeper learning curve for new users
Code Comparison
jslint:
function lint(source, options) {
"use strict";
let warnings;
options = Object.assign(Object.create(null), options);
warnings = jslint_core(source, options);
return {
warnings,
options,
directives: options.directives
};
}
jslint>:
function lint(source, options) {
var warnings;
options = Object.create(options || {});
warnings = jslint_core(source, options);
return {
warnings: warnings,
options: options,
directives: options.directives
};
}
The main differences in the code are:
- Use of
"use strict"
in jslint - ES6 features like
let
and object shorthand in jslint - More modern JavaScript syntax in jslint overall
Both repositories serve the same primary purpose of providing a JavaScript linting tool, but jslint appears to be more up-to-date and feature-rich, while jslint> might be more suitable for projects requiring older JavaScript syntax or greater stability.
Find and fix problems in your JavaScript code.
Pros of ESLint
- Highly configurable with numerous rules and plugins
- Supports modern JavaScript features and frameworks
- Active development and large community support
Cons of ESLint
- Steeper learning curve due to extensive configuration options
- Can be slower than JSLint for large codebases
- Requires more setup and maintenance
Code Comparison
JSLint:
/*jslint browser: true, devel: true */
(function () {
"use strict";
// Your code here
}());
ESLint:
/* eslint-env browser, node */
/* eslint-disable no-console */
(() => {
'use strict';
// Your code here
})();
Key Differences
- JSLint is more opinionated and less flexible
- ESLint offers more customization and modern JavaScript support
- JSLint focuses on enforcing good practices, while ESLint allows for team-specific preferences
Community and Ecosystem
- ESLint has a larger ecosystem with numerous plugins and integrations
- JSLint has a smaller but dedicated user base
- ESLint is more widely adopted in modern JavaScript development
Performance
- JSLint is generally faster for small to medium-sized projects
- ESLint's performance can be optimized with careful configuration
- Both tools can be integrated into CI/CD pipelines for automated linting
JSHint is a tool that helps to detect errors and potential problems in your JavaScript code
Pros of JSHint
- More flexible and configurable than JSLint
- Supports a wider range of JavaScript coding styles
- Actively maintained with regular updates
Cons of JSHint
- Less strict than JSLint, potentially allowing some code quality issues
- Can be more complex to set up due to numerous configuration options
- May produce more false positives in certain scenarios
Code Comparison
JSLint (more strict):
function example(a, b) {
"use strict";
return a + b;
}
JSHint (more flexible):
function example(a, b) {
// JSHint allows omitting "use strict"
return a + b;
}
JSLint enforces stricter coding standards, such as requiring "use strict" in functions, while JSHint allows for more flexibility in coding style. JSHint's configuration options enable developers to customize the linting rules to match their project's specific needs, whereas JSLint follows a more opinionated approach with fewer customization options.
Both tools aim to improve code quality and catch potential errors, but they differ in their philosophy and implementation. JSLint focuses on enforcing a specific coding style, while JSHint provides more flexibility for developers to define their own standards.
🌟 JavaScript Style Guide, with linter & automatic code fixer
Pros of Standard
- More active development and community support
- Supports modern JavaScript features and syntax
- Includes automatic code formatting capabilities
Cons of Standard
- Less configurable than JSLint
- May be too opinionated for some developers
- Larger package size and potentially slower performance
Code Comparison
JSLint:
/*jslint browser */
function example() {
var x = 1;
return x;
}
Standard:
function example () {
const x = 1
return x
}
Standard enforces a more modern JavaScript style, including:
- No semicolons (optional)
const
instead ofvar
- Spaces after function names
- No JSLint-style directives
Both tools aim to enforce consistent coding styles, but Standard takes a more opinionated approach with less configuration options. JSLint offers more granular control over rules but may be less suited for modern JavaScript development. Standard's popularity and active community make it a strong choice for many projects, while JSLint's simplicity and focus on strict code quality may appeal to developers seeking a more traditional linting experience.
Prettier is an opinionated code formatter.
Pros of Prettier
- Supports a wider range of languages and file types
- Highly configurable with extensive options
- Integrates well with various editors and IDEs
Cons of Prettier
- Can be opinionated, sometimes forcing unwanted formatting
- May require more setup and configuration than JSLint
- Slower performance on large codebases compared to JSLint
Code Comparison
JSLint:
function example(x) {
if (x) {
return true;
} else {
return false;
}
}
Prettier:
function example(x) {
if (x) {
return true;
} else {
return false;
}
}
Key Differences
- JSLint focuses on JavaScript linting, while Prettier is a code formatter for multiple languages
- JSLint enforces strict coding standards, whereas Prettier primarily focuses on consistent formatting
- Prettier automatically reformats code, while JSLint provides warnings and errors without modifying the code
Use Cases
- JSLint: Best for projects requiring strict JavaScript code quality checks
- Prettier: Ideal for teams wanting consistent code formatting across various languages and file types
Community and Ecosystem
- Prettier has a larger and more active community
- JSLint has been around longer but has a smaller, more focused user base
- Prettier offers more integrations with modern development tools and workflows
JavaScript Style Guide
Pros of JavaScript
- More comprehensive and modern style guide, covering ES6+ features
- Actively maintained with frequent updates and community contributions
- Includes explanations and examples for each rule, enhancing understanding
Cons of JavaScript
- More complex and potentially overwhelming for beginners
- May require additional configuration and setup in projects
- Some rules might be opinionated and not universally agreed upon
Code Comparison
JSLint:
/*jslint browser */
function example(x) {
'use strict';
return x + 1;
}
JavaScript:
// airbnb-style
const example = (x) => {
return x + 1;
};
Key Differences
- JSLint focuses on strict error checking and enforcing a specific coding style
- JavaScript provides a more flexible and comprehensive set of guidelines
- JSLint is more prescriptive, while JavaScript allows for some customization
- JavaScript includes rules for modern JavaScript features and best practices
- JSLint has a simpler setup, while JavaScript may require additional tools like ESLint
Use Cases
- JSLint: Suitable for quick code quality checks and enforcing a strict coding style
- JavaScript: Ideal for teams looking for a comprehensive, modern JavaScript style guide and linting rules
Community and Ecosystem
- JSLint has a smaller, more focused community
- JavaScript has a larger ecosystem with various tools and extensions built around it
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
JSLint, The JavaScript Code Quality and Coverage Tool
Douglas Crockford douglas@crockford.com
Status
Branch | master (v2024.6.28) | beta (Web Demo) | alpha (Development) |
---|---|---|---|
CI | |||
Coverage | |||
Demo | |||
Artifacts |
Table of Contents
-
- API Doc
- Directive
/*jslint*/
/*jslint beta*/
/*jslint bitwise*/
/*jslint browser*/
/*jslint convert*/
/*jslint couch*/
/*jslint devel*/
/*jslint eval*/
/*jslint fart*/
/*jslint for*/
/*jslint getset*/
/*jslint indent2*/
/*jslint long*/
/*jslint node*/
/*jslint nomen*/
/*jslint single*/
/*jslint subscript*/
/*jslint this*/
/*jslint trace*/
/*jslint unordered*/
/*jslint white*/
- Directive
/*global*/
- Directive
/*property*/
- Directive
/*jslint-disable*/.../*jslint-enable*/
- Directive
//jslint-ignore-line
Web Demo
Web Demo Archived
Quickstart Install
To install, just download and save https://www.jslint.com/jslint.mjs to file:
#!/bin/sh
curl -L https://www.jslint.com/jslint.mjs > jslint.mjs
- shell output
To run jslint.mjs
in shell:
#!/bin/sh
printf "console.log('hello world');\n" > hello.js
node jslint.mjs hello.js
- shell output
To import jslint.mjs
in ES Module environment:
#!/bin/sh
node --input-type=module --eval '
/*jslint devel*/
// Import JSLint in ES Module environment.
import jslint from "./jslint.mjs";
let globals = ["caches", "indexedDb"];
let options = {browser: true};
let result;
let source = "console.log(\u0027hello world\u0027);\n";
// JSLint <source> and print <formatted_message>.
result = jslint.jslint(source, options, globals);
result.warnings.forEach(function ({
formatted_message
}) {
console.error(formatted_message);
});
'
- shell output
To import jslint.mjs
in CommonJS environment:
#!/bin/sh
node --eval '
/*jslint devel*/
(async function () {
let globals = ["caches", "indexedDb"];
let jslint;
let options = {browser: true};
let result;
let source = "console.log(\u0027hello world\u0027);\n";
// Import JSLint in CommonJS environment.
jslint = await import("./jslint.mjs");
jslint = jslint.default;
// JSLint <source> and print <formatted_message>.
result = jslint.jslint(source, options, globals);
result.warnings.forEach(function ({
formatted_message
}) {
console.error(formatted_message);
});
}());
'
- shell output
To JSLint entire directory in shell:
#!/bin/sh
# JSLint directory '.'
node jslint.mjs .
- shell output
Quickstart JSLint Report
To create a JSLint report in shell:
#!/bin/sh
printf "function foo() {console.log('hello world');}\n" > hello.js
# Create JSLint report from file 'hello.js' in shell.
node jslint.mjs \
jslint_report=.artifact/jslint_report_hello.html \
hello.js
- shell output
- screenshot file .artifact/jslint_report_hello.html
To create a JSLint report in javascript:
#!/bin/sh
node --input-type=module --eval '
/*jslint devel*/
import jslint from "./jslint.mjs";
import fs from "fs";
(async function () {
let result;
let source = "function foo() {console.log(\u0027hello world\u0027);}\n";
// Create JSLint report from <source> in javascript.
result = jslint.jslint(source);
result = jslint.jslint_report(result);
result = `<body class="JSLINT_ JSLINT_REPORT_">\n${result}</body>\n`;
await fs.promises.mkdir(".artifact/", {recursive: true});
await fs.promises.writeFile(".artifact/jslint_report_hello.html", result);
console.error("wrote file .artifact/jslint_report_hello.html");
}());
'
- shell output
- screenshot file .artifact/jslint_report_hello.html
Quickstart V8 Coverage Report
To create V8 coverage report from Node.js / Npm program in shell:
#!/bin/sh
git clone https://github.com/tryghost/node-sqlite3 node-sqlite3-sh \
--branch=v5.0.11 \
--depth=1 \
--single-branch
cd node-sqlite3-sh
npm install
# Create V8 coverage report from program `npm run test` in shell.
node ../jslint.mjs \
v8_coverage_report=../.artifact/coverage_sqlite3_sh/ \
--exclude=tes?/ \
--exclude=tes[!0-9A-Z_a-z-]/ \
--exclude=tes[0-9A-Z_a-z-]/ \
--exclude=tes[^0-9A-Z_a-z-]/ \
--exclude=test/**/*.js \
--exclude=test/suppor*/*elper.js \
--exclude=test/suppor?/?elper.js \
--exclude=test/support/helper.js \
--include=**/*.cjs \
--include=**/*.js \
--include=**/*.mjs \
--include=li*/*.js \
--include=li?/*.js \
--include=lib/ \
--include=lib/**/*.js \
--include=lib/*.js \
--include=lib/sqlite3.js \
npm run test
- shell output
- screenshot file .artifact/coverage_sqlite3_sh/index.html
- screenshot file .artifact/coverage_sqlite3_sh/lib/sqlite3.js.html
To create V8 coverage report from Node.js / Npm program in javascript:
#!/bin/sh
git clone https://github.com/tryghost/node-sqlite3 node-sqlite3-js \
--branch=v5.0.11 \
--depth=1 \
--single-branch
cd node-sqlite3-js
npm install
node --input-type=module --eval '
/*jslint node*/
import jslint from "../jslint.mjs";
(async function () {
// Create V8 coverage report from program `npm run test` in javascript.
await jslint.v8CoverageReportCreate({
coverageDir: "../.artifact/coverage_sqlite3_js/",
processArgv: [
"--exclude=tes?/",
"--exclude=tes[!0-9A-Z_a-z-]/",
"--exclude=tes[0-9A-Z_a-z-]/",
"--exclude=tes[^0-9A-Z_a-z-]/",
"--exclude=test/**/*.js",
"--exclude=test/suppor*/*elper.js",
"--exclude=test/suppor?/?elper.js",
"--exclude=test/support/helper.js",
"--include=**/*.cjs",
"--include=**/*.js",
"--include=**/*.mjs",
"--include=li*/*.js",
"--include=li?/*.js",
"--include=lib/",
"--include=lib/**/*.js",
"--include=lib/*.js",
"--include=lib/sqlite3.js",
"npm", "run", "test"
]
});
}());
'
- shell output
- screenshot file .artifact/coverage_sqlite3_js/index.html
- screenshot file .artifact/coverage_sqlite3_js/lib/sqlite3.js.html
Quickstart JSLint in CodeMirror
-
Download and save
jslint.mjs
,jslint_wrapper_codemirror.js
to file. -
Edit, save, and serve example html-file below:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CodeMirror: JSLint Demo</title>
<!-- Assets from codemirror. -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.10/codemirror.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.10/addon/lint/lint.css">
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.10/codemirror.js"></script>
<script defer src="https://codemirror.net/mode/javascript/javascript.js"></script>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.10/addon/lint/lint.js"></script>
<!-- Assets from jslint. -->
<script type="module" src="./jslint.mjs?window_jslint=1"></script>
<script defer src="./jslint_wrapper_codemirror.js"></script>
<style>
body {
background: #bbb;
color: #333;
font-family: sans-serif;
margin: 20px;
}
.JSLINT_.JSLINT_REPORT_ {
margin-top: 20px;
}
#editor1 {
height: 300px;
width: 100%;
}
</style>
</head>
<body>
<h1>CodeMirror: JSLint Demo</h1>
<h3>
This demo will auto-lint the code below, and auto-generate a report as you type.
</h3>
<!-- Container for codemirror-editor. -->
<textarea id="editor1">console.log('hello world');</textarea>
<!-- Container for jslint-report. -->
<div class="JSLINT_ JSLINT_REPORT_"></div>
<script type=module>
window.addEventListener("load", function () {
let editor = window.CodeMirror.fromTextArea(document.getElementById(
"editor1"
), {
gutters: [
"CodeMirror-lint-markers"
],
indentUnit: 4,
lineNumbers: true,
lint: {
lintOnChange: true, // Enable auto-lint.
options: {
// browser: true,
// node: true
globals: [
// "caches",
// "indexedDb"
]
}
},
mode: "javascript"
});
// Initialize event-handling before linter is run.
editor.on("lintJslintBefore", function (/* options */) {
// options.browser = true;
// options.node = true;
// options.globals = [
// "caches",
// "indexedDb"
// ];
return;
});
// Initialize event-handling after linter is run.
editor.on("lintJslintAfter", function (options) {
// Generate jslint-report from options.result.
document.querySelector(
".JSLINT_REPORT_"
).innerHTML = window.jslint.jslint_report(options.result);
});
// Manually trigger linter.
editor.performLint();
});
</script>
</body>
</html>
- Live example at https://www.jslint.com/jslint_wrapper_codemirror.html
Quickstart JSLint in Vim
- Download and save
jslint.mjs
,jslint_wrapper_vim.vim
to directory~/.vim/
- Add vim-command
:source ~/.vim/jslint_wrapper_vim.vim
to file~/.vimrc
- If above files were saved to custom-directory, then use that directory instead, e.g.:
- save
jslint.mjs
,jslint_wrapper_vim.vim
to directory~/vimfiles/
- vim-command
:source ~/vimfiles/jslint_wrapper_vim.vim
- save
- If above files were saved to custom-directory, then use that directory instead, e.g.:
- Vim can now jslint files (via nodejs):
- with vim-command
:SaveAndJslint
- with vim-key-combo
<Ctrl-S> <Ctrl-J>
- with vim-command
- screenshot
Quickstart JSLint in VSCode
- In VSCode, search and install extension
vscode-jslint
- In VSCode, while editing a javascript file:
- right-click context-menu and select
[JSLint - Lint File]
- or use key-binding
[Ctrl + Shift + J], [L]
- or use key-binding
[ Cmd + Shift + J], [L]
for Mac
- right-click context-menu and select
- screenshot
Documentation
-
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.
-
index.html runs the jslint.mjs function in a web page.
JSLint can be run anywhere that JavaScript (or Java) can run.
The place to express yourself in programming is in the quality of your ideas and the efficiency of their execution. The role of style in programming is the same as in literature: It makes for better reading. A great writer doesn't express herself by putting the spaces before her commas instead of after, or by putting extra spaces inside her parentheses. A great writer will slavishly conform to some rules of style, and that in no way constrains her power to express herself creatively. See for example William Strunk's The Elements of Style [https://www.crockford.com/style.html].
This applies to programming as well. Conforming to a consistent style improves readability, and frees you to express yourself in ways that matter. JSLint here plays the part of a stern but benevolent editor, helping you to get the style right so that you can focus your creative energy where it is most needed.
API Doc
Directive /*jslint*/
/*jslint beta*/
/*jslint beta*/
// Enable experimental warnings.
// Warn if global variables are redefined.
// Warn if const / let statements are not declared at top of function or
// script, similar to var statements.
// Warn if const / let / var statements are not declared in ascii-order.
// Warn if named-functions are not declared in ascii-order.
// Warn if cases in switch-statements are not in ascii-order.
/*jslint bitwise*/
/*jslint bitwise*/
// Allow bitwise operator.
let foo = 0 | 1;
/*jslint browser*/
/*jslint browser*/
// Assume browser environment.
localStorage.getItem("foo");
/*jslint convert*/
/*jslint convert*/
// Allow conversion operator.
let foo = new Date() + "";
let bar = !!0;
/*jslint couch*/
/*jslint couch*/
// Assume CouchDb environment.
registerType("text-json", "text/json");
/*jslint devel*/
/*jslint devel*/
// Allow console.log() and friends.
console.log("hello");
/*jslint eval*/
/*jslint eval*/
// Allow eval().
eval("1");
/*jslint fart*/
/*jslint fart*/
// Allow complex fat-arrow.
let foo = async ({bar, baz}) => {
return await bar(baz);
};
/*jslint for*/
/*jslint for*/
// Allow for-loop.
function foo() {
let ii;
for (ii = 0; ii < 10; ii += 1) {
foo();
}
}
/*jslint getset*/
/*jslint getset, this, devel*/
// Allow get() and set().
let foo = {
bar: 0,
get getBar() {
return this.bar;
},
set setBar(value) {
this.bar = value;
}
};
console.log(foo.getBar); // 0
foo.setBar = 1;
console.log(foo.getBar); // 1
/*jslint indent2*/
/*jslint indent2*/
// Use 2-space indent.
function foo() {
return;
}
/*jslint long*/
/*jslint long*/
// Allow long lines.
let foo = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
/*jslint node*/
/*jslint node*/
// Assume Node.js environment.
require("fs");
/*jslint nomen*/
/*jslint nomen*/
// Allow weird property name.
let foo = {};
foo._bar = 1;
/*jslint single*/
/*jslint single*/
// Allow single-quote strings.
let foo = '';
/*jslint subscript*/
/*jslint subscript*/
// Allow identifiers in subscript-notation.
let foo = {};
foo["bar"] = 1;
/*jslint this*/
/*jslint this*/
// Allow 'this'.
function foo() {
return this;
}
/*jslint trace*/
/*jslint trace*/
// Include jslint stack-trace in warnings.
console.log('hello world');
/*
1. Undeclared 'console'.
console.log('hello world');
Error
at warn_at (...)
at warn (...)
at lookup (...)
at pre_v (...)
at jslint.mjs
2. Use double quotes, not single quotes.
console.log(...);
Error
at warn_at (...)
at lex_string (...)
at lex_token (...)
at jslint_phase2_lex (...)
at Function.jslint (...)
at jslint.mjs
*/
/*jslint unordered*/
/*jslint unordered*/
// Allow unordered cases, params, properties, variables, and exports.
let foo = {bb: 1, aa: 0};
function bar({
bb = 1,
aa = 0
}) {
return aa + bb;
}
export {
foo,
bar
};
/*jslint white*/
/*jslint white*/
// Allow messy whitespace.
let foo = 1; let bar = 2;
Directive /*global*/
/*global foo, bar*/
// Declare global variables foo, bar.
foo();
bar();
Directive /*property*/
/*property foo, bar*/
// Restrict property-access to only .foo, .bar.
let aa = {bar: 1, foo: 2};
Directive /*jslint-disable*/.../*jslint-enable*/
/*jslint-disable*/
JSLint will ignore and treat this region as blank-lines.
Syntax error.
/*jslint-enable*/
Directive //jslint-ignore-line
// JSLint will ignore non-fatal warnings at given line.
eval("1"); //jslint-ignore-line
Package Listing
Changelog
License
- JSLint is under Unlicense License.
- CodeMirror editor is under MIT License.
- Function
v8CoverageListMerge
is derived from MIT Licensed v8-coverage.
Devops Instruction
pull-request merge
- 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
shGitPullrequest beta beta
- verify ci-success for origin-branch-alpha
- https://github.com/kaizhu256/jslint/actions
git push upstream alpha -f
- verify ci-success for upstream-branch-alpha
- https://github.com/jslint-org/jslint/actions
- goto https://github.com/jslint-org/jslint/compare/beta...kaizhu256:jslint:branch-p2024.6.23
- click
Create pull request
- input
Add your description here...
with:
Fixes #xxx.
- <primary-commit-message>
This PR will ...
this PR will additionally:
- <secondary-commit-message>
...
<screenshot>
- verify
commit into jslint-org:beta
- click
Create pull request
- verify ci-success for pull-request
- https://github.com/jslint-org/jslint/actions/workflows/on_pull_request.yml
- wait awhile before continuing ...
- click
Rebase and merge
- verify ci-success for upstream-branch-beta
- https://github.com/jslint-org/jslint/actions
shGitPullrequestCleanup
- verify ci-success for origin-branch-alpha
- https://github.com/kaizhu256/jslint/actions
git push upstream alpha -f
- verify ci-success for upstream-branch-alpha
- https://github.com/jslint-org/jslint/actions
- click
Delete branch
branch-master commit
shGitPullrequest master beta
- verify ci-success for origin-branch-alpha
- https://github.com/kaizhu256/jslint/actions
git push upstream alpha -f
- verify ci-success for upstream-branch-alpha
- https://github.com/jslint-org/jslint/actions
- goto https://github.com/jslint-org/jslint/compare/beta...kaizhu256:jslint:branch-v2024.6.28
- click
Create pull request
- input
Add a title
with:# v20yy.mm.dd
- input
Add a description
with:
- <primary-commit-message>
- <secondary-commit-message>
- verify
commit into jslint-org:beta
- click
Create pull request
- verify ci-success for pull-request
- https://github.com/jslint-org/jslint/actions/workflows/on_pull_request.yml
- wait awhile before continuing ...
- click
Rebase and merge
- verify ci-success for upstream-branch-beta
- https://github.com/jslint-org/jslint/actions
shGitPullrequestCleanup
- verify ci-success for origin-branch-alpha
- https://github.com/kaizhu256/jslint/actions
git push upstream alpha -f
- verify ci-success for upstream-branch-alpha
- https://github.com/jslint-org/jslint/actions
- click
Delete branch
git push origin beta:master
- verify ci-success for origin-branch-master
- https://github.com/kaizhu256/jslint/actions
git push upstream beta:master
- verify ci-success for upstream-branch-master
- https://github.com/jslint-org/jslint/actions
branch-master publish
git push upstream beta:master
- verify ci-success for upstream-branch-master
- https://github.com/jslint-org/jslint/actions
- goto https://github.com/jslint-org/jslint/releases/new
- input
Choose a tag
with:v20yy.mm.dd
- click
Create new tag: v20yy.mm.dd on publish
- verify correct-year
20yy
- verify correct-year
- select
Target: master
- select
Previous tag:auto
- input
Release title
with:v20yy.mm.dd - <primary-commit-message>
- input
Describe this release
with:
- <primary-commit-message>
- <secondary-commit-message>
- click
Generate release notes
- click
Set as the latest release
- click
Preview
and review - click
Publish release
- verify ci-success for upstream-branch-publish
- https://github.com/jslint-org/jslint/actions
- verify email-notification
Successfully published @jslint-org/jslint@20yy.mm.dd
vscode-jslint publish
- goto https://github.com/jslint-org/jslint/tree/gh-pages/branch-beta/.artifact/jslint_wrapper_vscode
- click
vscode-jslint-20yy.mm.dd.vsix
- click
Raw
to download - goto https://marketplace.visualstudio.com/manage/publishers/jslint
- right-click
Update
- upload downloaded file
vscode-jslint-20yy.mm.dd.vsix
- click 'Upload'
- verify email-notification
[Succeeded] Extension publish on Visual Studio Marketplace - vscode-jslint
Top Related Projects
JSLint, The JavaScript Code Quality and Coverage Tool
Find and fix problems in your JavaScript code.
JSHint is a tool that helps to detect errors and potential problems in your JavaScript code
🌟 JavaScript Style Guide, with linter & automatic code fixer
Prettier is an opinionated code formatter.
JavaScript Style Guide
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot