From 57c7e7c3c2384b84a50f4e80fe3118e15efe457f Mon Sep 17 00:00:00 2001 From: Nishthajain7 Date: Mon, 9 Mar 2026 16:32:35 +0530 Subject: [PATCH] Migrated to ESlint --- .../IDE/components/Editor/stateUtils.js | 61 +++++-------------- package-lock.json | 12 ++++ package.json | 1 + 3 files changed, 28 insertions(+), 46 deletions(-) diff --git a/client/modules/IDE/components/Editor/stateUtils.js b/client/modules/IDE/components/Editor/stateUtils.js index e3a90e813a..c2e05d7355 100644 --- a/client/modules/IDE/components/Editor/stateUtils.js +++ b/client/modules/IDE/components/Editor/stateUtils.js @@ -48,13 +48,14 @@ import { html } from '@codemirror/lang-html'; import { json } from '@codemirror/lang-json'; import { xml } from '@codemirror/lang-xml'; import { linter } from '@codemirror/lint'; -import { JSHINT } from 'jshint'; import { HTMLHint } from 'htmlhint'; import { CSSLint } from 'csslint'; import { emmetConfig } from '@emmetio/codemirror6-plugin'; -import p5JavaScript from './p5JavaScript'; +import { esLint } from '@codemirror/lang-javascript'; +import { Linter } from 'eslint-linter-browserify'; import { tidyCodeWithPrettier } from './tidier'; +import p5JavaScript from './p5JavaScript'; import { highlightStyle } from './highlightStyle'; import { errorDecorationStateField } from './consoleErrorDecoration'; @@ -182,52 +183,20 @@ function makeHtmlLinter(callback) { }; } -const JSHINT_OPTIONS = { - asi: true, - eqeqeq: false, - '-W041': false, - esversion: 11 +const ESLINT_CONFIG = { + languageOptions: { + ecmaVersion: 2021 + }, + rules: { + semi: 'off', + eqeqeq: 'off' + } }; -// TODO: Consider using ESLINT instead -function makeJsLinter(callback) { - return (view) => { - const documentContent = view.state.doc.toString(); - - // Run JSHINT - JSHINT(documentContent, JSHINT_OPTIONS); - const { errors } = JSHINT; - - // Return errors - const diagnostics = []; - errors.forEach((error) => { - if (!error) return; - - const { line: errorLine, character: errorCharacter, evidence } = error; - const cmLine = view.state.doc.line(errorLine); - - // https://github.com/codemirror/codemirror5/blob/master/addon/lint/javascript-lint.js - const start = errorCharacter - 1; - let end = start + 1; - if (evidence) { - const index = evidence.substring(start).search(/.\b/); - if (index > -1) { - end += index; - } - } - - diagnostics.push({ - from: cmLine.from + start, - to: cmLine.from + end, - severity: error.code.startsWith('W') ? 'warning' : 'error', - message: error.reason - }); - }); +const eslint = new Linter(); - if (callback) callback(diagnostics); - - return diagnostics; - }; +function makeJsLinter(callback) { + return linter(esLint(eslint, ESLINT_CONFIG)); } function getFileLinter(fileName, callback) { @@ -235,7 +204,7 @@ function getFileLinter(fileName, callback) { switch (fileMode) { case 'javascript': - return linter(makeJsLinter(callback)); + return makeJsLinter(callback); case 'html': return linter(makeHtmlLinter(callback)); case 'css': diff --git a/package-lock.json b/package-lock.json index f89c3fef0f..67833ba83e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,6 +62,7 @@ "dotenv": "^2.0.0", "dropzone": "^4.3.0", "escape-string-regexp": "^1.0.5", + "eslint-linter-browserify": "^10.0.3", "eslint-scope": "^8.4.0", "eslint-webpack-plugin": "^3.1.1", "express": "^4.21.2", @@ -21882,6 +21883,12 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-linter-browserify": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/eslint-linter-browserify/-/eslint-linter-browserify-10.0.3.tgz", + "integrity": "sha512-ljF77YFJ/LQNuKeJ42KDhvO7SQe12+m37TfFFs3TXQSx/u0/2HVxqfUYRU3RPMEO6UW9j/NYYqmRj+1f5GKS3g==", + "license": "MIT" + }, "node_modules/eslint-module-utils": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", @@ -56076,6 +56083,11 @@ } } }, + "eslint-linter-browserify": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/eslint-linter-browserify/-/eslint-linter-browserify-10.0.3.tgz", + "integrity": "sha512-ljF77YFJ/LQNuKeJ42KDhvO7SQe12+m37TfFFs3TXQSx/u0/2HVxqfUYRU3RPMEO6UW9j/NYYqmRj+1f5GKS3g==" + }, "eslint-module-utils": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", diff --git a/package.json b/package.json index bfe2322645..6c22b2a06f 100644 --- a/package.json +++ b/package.json @@ -265,6 +265,7 @@ "dotenv": "^2.0.0", "dropzone": "^4.3.0", "escape-string-regexp": "^1.0.5", + "eslint-linter-browserify": "^10.0.3", "eslint-scope": "^8.4.0", "eslint-webpack-plugin": "^3.1.1", "express": "^4.21.2",