Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Using ECMAScript21 in VSCode creates syntax error

Karl Martin Lun
Tera Contributor

I was very exited to get started with development with modern Javascript, so I changed the settings in my scoped app and rewrote my application to it.

 

 

let MyClass = Class.create();
MyClass = class {
    constructor() {}
}

 

 

I've written a class in a Script Include with this format in ServiceNow Studio everything working.

When importing the app to Visual Studio Code (VSCode), trying to sync the same Script include I get this error:

 

 

Syntax errors detected in PartyRegisterApi.script.js -> Parsing error: The keyword 'let' is reserved

 

 

I have tried changing the .eslintrc-file and package.json to no success. The contents of those files are pasted beneath.
Can anyone please help?

 

 

package.json (in this file I've tried several eslint-values)
{
  "name": "now",
  "version": "1.0.0",
  "dependencies": {
    "eslint": "8.27.0"
  }
}
.eslintrc (this is not the original content, but what I found in the sys_property glide.ui.syntax_editor.linter.eslint_config)
{
  "parserOptions": {
    "ecmaVersion": 12
  },
  "rules": {
    "sn-no-async-await": "error",
    "sn-no-generator-functions": "error",
    "sn-no-promises": "warn",
    "sn-no-proxies": "warn",
    "constructor-super": "warn",
    "no-case-declarations": "warn",
    "no-class-assign": "warn",
    "no-compare-neg-zero": "warn",
    "no-cond-assign": "warn",
    "no-console": "warn",
    "no-const-assign": "warn",
    "no-constant-condition": "warn",
    "no-control-regex": "warn",
    "no-debugger": "warn",
    "no-delete-var": "warn",
    "no-dupe-args": "warn",
    "no-dupe-class-members": "warn",
    "no-dupe-keys": "warn",
    "no-duplicate-case": "warn",
    "no-empty-character-class": "warn",
    "no-empty-pattern": "warn",
    "no-empty": ["warn", { "allowEmptyCatch": true }],
    "no-ex-assign": "warn",
    "no-extra-boolean-cast": "warn",
    "no-extra-semi": "warn",
    "semi" : "warn",
    "no-fallthrough": "warn",
    "no-func-assign": "warn",
    "no-global-assign": "warn",
    "no-inner-declarations": "warn",
    "no-invalid-regexp": "warn",
    "no-irregular-whitespace": "warn",
    "no-mixed-spaces-and-tabs": "warn",
    "no-new-symbol": "warn",
    "no-obj-calls": "warn",
    "no-octal": "warn",
    "no-redeclare": "warn",
    "no-regex-spaces": "warn",
    "no-self-assign": "warn",
    "no-sparse-arrays": "warn",
    "no-this-before-super": "warn",
    "no-undef": "off",
    "no-unexpected-multiline": "warn",
    "no-unreachable": "warn",
    "no-unsafe-finally": "warn",
    "no-unsafe-negation": "warn",
    "no-unused-labels": "warn",
    "no-unused-vars": "off",
    "no-useless-escape": "warn",
    "require-yield": "warn",
    "use-isnan": "warn",
    "valid-typeof": "warn"
  }
}

 

 

17 REPLIES 17

-

A workaround I found is bypassing the linter entirely by making it run on an empty string instead of the file you're syncing.

Change

const e=u.executeOnText(l)

to

const e=u.executeOnText("")

Use with caution 🙂

I adapted it a bit to only remove the esLint lines that make the executeOnText throw an exception (which will crashing the extension and preventing the sync from happening). 

Change:

const e=u.executeOnText(l);​


To:

const sanitizedText = l.replace(/\/\* eslint .*?\*\//g, ''); const e=u.executeOnText(sanitizedText)

 
Seems to work fine for me, I can finally sync scripts with esLint rules in them.

Also use with caution, but maybe a bit less caution then the suggestion of my previous poster. Thanks for the inspiration though. 🙂

nilshaug
Tera Contributor

Thank. This worked for me. @Servicenow would be great if you can fix this properly and bring full support for es2020 in the extension.

nilshaug
Tera Contributor

worked for me!