Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 43 additions & 1 deletion eslint.flat.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,26 @@

// MODULES //

var path = require( 'path' );

Check warning on line 25 in eslint.flat.config.js

View workflow job for this annotation

GitHub Actions / Lint Changed Files

only the `join` property of the required module is used; require the property directly
var globals = require( 'globals' );
var tsParser = require( '@typescript-eslint/parser' );
var tsPlugin = require( '@typescript-eslint/eslint-plugin' );
var stylisticTs = require( '@stylistic/eslint-plugin-ts' );
var pluginN = require( 'eslint-plugin-n' );
var pluginCspell = require( '@cspell/eslint-plugin' );
var pluginJsdoc = require( 'eslint-plugin-jsdoc' );
var pluginImport = require( 'eslint-plugin-import' );
var pluginExpectType = require( 'eslint-plugin-expect-type' );
var assign = require( './lib/node_modules/@stdlib/object/assign' );
var stdlibPlugin = require( './lib/node_modules/@stdlib/_tools/eslint/rules/scripts/plugin.js' );
var restrictedSyntaxConfig = require( './etc/eslint/overrides/restricted_syntax.js' );
var rules = require( './etc/eslint/rules' );
var tsRules = require( './etc/eslint/rules/typescript.js' );


// VARIABLES //

var tsGlobalVars;
var globalVars;
var config;

Expand All @@ -42,6 +50,7 @@

globalVars = assign( {}, globals.browser, globals.node );
globalVars = assign( globalVars, globals.commonjs, globals.worker );
tsGlobalVars = assign( {}, globals.browser, globals.node );

config = [
// Global ignores:
Expand All @@ -50,7 +59,10 @@
'**/build/',
'**/reports/',
'dist/',
'.git*'
'.git*',

// Un-ignore stdlib source (nested `node_modules` directories remain ignored by ESLint's defaults):
'!lib/node_modules/'
]
},

Expand Down Expand Up @@ -122,6 +134,36 @@
}],
'no-restricted-syntax': restrictedSyntaxConfig
}
},

// TypeScript declarations:
{
'files': [ '**/*.d.ts' ],
'languageOptions': {
'parser': tsParser,
'sourceType': 'module',
'parserOptions': {
'project': path.join( __dirname, 'tsconfig.json' )
},
'globals': tsGlobalVars
},
'plugins': {
'@typescript-eslint': tsPlugin,
'@stylistic/ts': stylisticTs,
'jsdoc': pluginJsdoc,
'import': pluginImport,
'expect-type': pluginExpectType,
'stdlib': stdlibPlugin
},
'rules': tsRules
},

// TypeScript test files:
{
'files': [ '**/test/**/*.ts' ],
'rules': {
'jsdoc/require-jsdoc': 'off'
}
}
];

Expand Down
132 changes: 132 additions & 0 deletions etc/eslint/eslint.flat.config.markdown.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
/**
* @license Apache-2.0
*
* Copyright (c) 2026 The Stdlib Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

'use strict';

// MODULES //

var assign = require( './../../lib/node_modules/@stdlib/object/assign' );
var defaults = require( './../../eslint.flat.config.js' );


// VARIABLES //

var config;
var entry;
var i;


// MAIN //

/**
* ESLint flat configuration for linting Markdown code blocks.
*/
config = [
// Allow linting code blocks belonging to files residing under `node_modules` directories (e.g., package files residing under `lib/node_modules`), which ESLint unconditionally ignores by default:
{
'ignores': [ '!**/node_modules/' ]
}
];

// Include the default configuration, ensuring that Markdown files are matched, as code blocks are linted using the path of the containing Markdown file:
for ( i = 0; i < defaults.length; i++ ) {
entry = defaults[ i ];
if ( entry.files && entry.files.indexOf( '**/*.js' ) !== -1 ) {
entry = assign( {}, entry );
entry.files = entry.files.concat( [ '**/*.md' ] );
}
config.push( entry );
}

// Append configuration specific to Markdown code blocks:
config.push({
'linterOptions': {
// Do not flag unused disable directives, as the remark plugin unconditionally injects a `stdlib/require-order` disable directive when prepending the main `require` statement to subsequent code blocks:
'reportUnusedDisableDirectives': 'off'
},
'rules': {
// Allow variables to be declared as needed:
'vars-on-top': 'off',

// Allow using synchronous methods:
'n/no-sync': 'off',

// Allow using `console`:
'no-console': 'off',

// Do not require `use strict` pragma:
'strict': 'off',

// Do not require an end-of-line character in code blocks:
'eol-last': 'off',

// Require `4` space indentation:
'indent': [ 'error', 4, {
'SwitchCase': 0,
'VariableDeclarator': 1,
'outerIIFEBody': 1,
'MemberExpression': 1,
'FunctionDeclaration': {
'body': 1,
'parameters': 'off'
},
'FunctionExpression': {
'body': 1,
'parameters': 'off'
},
'CallExpression': {
'arguments': 'off'
},
'ArrayExpression': 1,
'ObjectExpression': 1,
'flatTernaryExpressions': true
}],

// Never allow tabs:
'no-tabs': 'error',

// Do not require JSDoc comments:
'jsdoc/require-jsdoc': 'off',

// Do not require `@private` annotations:
'stdlib/jsdoc-private-annotation': 'off',

// Do not lint return annotation values in JSDoc comments (FIXME: remove this once we can reliably lint Markdown code blocks):
'stdlib/jsdoc-return-annotations-values': 'off',

// Do not enforce disallowing empty lines between module-level require statements:
'stdlib/no-empty-lines-between-requires': 'off',

// Allow requiring the package as a whole even though only a single property is used:
'stdlib/no-single-property-require': 'off',

// Allow use of undeclared variables, as variables may be defined in previous code blocks or be implied:
'no-undef': 'off',

// Allow unused variables, as variables may be illustrative or used in subsequent code blocks:
'no-unused-vars': 'off',

// Allow unpublished packages to be required in example code:
'n/no-unpublished-require': 'off'
}
});


// EXPORTS //

module.exports = config;
2 changes: 1 addition & 1 deletion etc/npm/deps.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
acorn@"^8.1.0" acorn-loose@"^8.0.2" acorn-walk@"^8.0.2" d3-format@"^1.0.0" d3-scale@"^1.0.0" d3-shape@"^1.0.0" d3-time-format@"^2.0.0" debug@"^2.6.9" glob@"^7.0.5" minimist@"^1.2.0" readable-stream@"^2.1.4" resolve@"^1.1.7" vdom-to-html@"^2.3.0" virtual-dom@"^2.1.1" 0x@"^4.10.2" @cspell/eslint-plugin@"^8.8.0" @commitlint/cli@"^17.4.4" @commitlint/cz-commitlint@"^17.4.4" @conventional-commits/parser@"^0.4.1" @kaciras/deasync@"^1.0.1" @types/node@"^13.9.0" @typescript-eslint/parser@"^8.57.0" @typescript-eslint/eslint-plugin@"^8.57.0" ajv@"^5.2.2" browser-pack-flat@"^3.0.0" browserify@"^17.0.0" bundle-collapser@"^1.3.0" c8@"^7.12.0" chai@"^3.5.0" cheerio@"^1.0.0-rc.12" commitizen@"^4.3.0" common-shakeify@"^0.6.0" conventional-changelog-conventionalcommits@"^5.0.0" doctrine@"^3.0.0" editorconfig-checker@"^6.0.0" envify@"^4.0.0" @stylistic/eslint-plugin-ts@"^2.13.0" eslint@"^8.57.0" eslint-plugin-n@"^17.17.0" eslint-plugin-expect-type@"^0.2.3" eslint-plugin-import@"^2.29.0" eslint-plugin-jsdoc@"^46.8.2" eslint-plugin-stdlib@"file:./etc/eslint/plugin" globals@"^16.1.0" exorcist@"^2.0.0" factor-bundle@"^2.5.0" gh-pages@"git+https://github.com/Planeshifter/gh-pages.git#main" inquirer@"^8.0.0" jscodeshift@"^0.15.0" jsdoc@"^3.4.0" lunr@"^2.3.9" mathjax-node@"^2.0.1" mathjax-node-sre@"^3.0.0" mkdirp@"^0.5.1" mustache@"^4.0.0" parse-link-header@"^1.0.1" plato@"^1.5.0" process@"^0.11.10" proxyquire@"^2.0.0" proxyquire-universal@"^2.0.0" proxyquireify@"^3.1.1" read-installed@"^4.0.3" rehype@"^9.0.0" rehype-highlight@"^3.0.0" remark@"^11.0.1" remark-cli@"^7.0.0" remark-frontmatter@"^1.2.0" remark-html@"^10.0.0" remark-lint@"^6.0.0" remark-lint-blockquote-indentation@"^1.0.0" remark-lint-checkbox-character-style@"^1.0.0" remark-lint-checkbox-content-indent@"^1.0.0" remark-lint-code-block-style@"^1.0.0" remark-lint-definition-case@"^1.0.0" remark-lint-definition-spacing@"^1.0.0" remark-lint-emphasis-marker@"^1.0.0" remark-lint-fenced-code-flag@"^1.0.0" remark-lint-fenced-code-marker@"^1.0.0" remark-lint-file-extension@"^1.0.0" remark-lint-final-definition@"^1.0.0" remark-lint-final-newline@"^1.0.0" remark-lint-first-heading-level@"^1.1.0" remark-lint-hard-break-spaces@"^1.0.1" remark-lint-heading-increment@"^1.0.0" remark-lint-heading-style@"^1.0.0" remark-lint-linebreak-style@"^1.0.0" remark-lint-link-title-style@"^1.0.0" remark-lint-list-item-bullet-indent@"^1.0.0" remark-lint-list-item-content-indent@"^1.0.0" remark-lint-list-item-indent@"^1.0.0" remark-lint-list-item-spacing@"^1.1.0" remark-lint-maximum-heading-length@"^1.0.0" remark-lint-maximum-line-length@"^1.0.0" remark-lint-no-auto-link-without-protocol@"^1.0.0" remark-lint-no-blockquote-without-marker@"^2.0.0" remark-lint-no-consecutive-blank-lines@"^1.0.0" remark-lint-no-duplicate-definitions@"^1.0.0" remark-lint-no-duplicate-headings@"^1.0.0" remark-lint-no-duplicate-headings-in-section@"^1.0.0" remark-lint-no-emphasis-as-heading@"^1.0.0" remark-lint-no-empty-url@"^1.0.1" remark-lint-no-file-name-articles@"^1.0.0" remark-lint-no-file-name-consecutive-dashes@"^1.0.0" remark-lint-no-file-name-irregular-characters@"^1.0.0" remark-lint-no-file-name-mixed-case@"^1.0.0" remark-lint-no-file-name-outer-dashes@"^1.0.1" remark-lint-no-heading-content-indent@"^1.0.0" remark-lint-no-heading-indent@"^1.0.0" remark-lint-no-heading-like-paragraph@"^1.0.0" remark-lint-no-heading-punctuation@"^1.0.0" remark-lint-no-html@"^1.0.0" remark-lint-no-inline-padding@"^1.0.0" remark-lint-no-literal-urls@"^1.0.0" remark-lint-no-missing-blank-lines@"^1.0.0" remark-lint-no-multiple-toplevel-headings@"^1.0.0" remark-lint-no-paragraph-content-indent@"^1.0.1" remark-lint-no-reference-like-url@"^1.0.0" remark-lint-no-shell-dollars@"^1.0.0" remark-lint-no-shortcut-reference-image@"^1.0.0" remark-lint-no-shortcut-reference-link@"^1.0.1" remark-lint-no-table-indentation@"^1.0.0" remark-lint-no-tabs@"^1.0.0" remark-lint-no-trailing-spaces@"^3.0.2" remark-lint-no-undefined-references@"^1.0.0" remark-lint-no-unused-definitions@"^1.0.0" remark-lint-ordered-list-marker-style@"^1.0.0" remark-lint-ordered-list-marker-value@"^1.0.0" remark-lint-rule-style@"^1.0.0" remark-lint-strong-marker@"^1.0.0" remark-lint-table-cell-padding@"^1.0.0" remark-lint-table-pipe-alignment@"^1.0.0" remark-lint-table-pipes@"^1.0.0" remark-lint-unordered-list-marker-style@"^1.0.0" remark-slug@"^5.0.0" remark-unlink@"^2.0.0" remark-validate-links@"^9.0.1" remark-vdom@"^8.0.0" semver@"^6.0.0" source-map-explorer@"^2.5.3" spdx-license-ids@"^3.0.0" tap-min@"git+https://github.com/Planeshifter/tap-min.git" tap-spec@"5.x.x" tap-summary@"^4.0.0" tap-xunit@"^2.2.0" tape@"git+https://github.com/kgryte/tape.git#fix/globby" to-vfile@"^6.0.0" typedoc@"git+https://github.com/kgryte/typedoc.git#0.16.11-patch" typescript@"4.9.5" uglify-js@"^3.17.4" uglifyify@"^5.0.0" unified-lint-rule@"^1.0.1" unist-util-visit@"^2.0.0" unist-util-visit-parents@"^3.1.1" yaml@"^1.0.0" node-gyp@"^9.3.1"
acorn@"^8.1.0" acorn-loose@"^8.0.2" acorn-walk@"^8.0.2" d3-format@"^1.0.0" d3-scale@"^1.0.0" d3-shape@"^1.0.0" d3-time-format@"^2.0.0" debug@"^2.6.9" glob@"^7.0.5" minimist@"^1.2.0" readable-stream@"^2.1.4" resolve@"^1.1.7" vdom-to-html@"^2.3.0" virtual-dom@"^2.1.1" 0x@"^4.10.2" @cspell/eslint-plugin@"^8.8.0" @commitlint/cli@"^17.4.4" @commitlint/cz-commitlint@"^17.4.4" @conventional-commits/parser@"^0.4.1" @kaciras/deasync@"^1.0.1" @types/node@"^13.9.0" @typescript-eslint/parser@"^8.57.0" @typescript-eslint/eslint-plugin@"^8.57.0" ajv@"^5.2.2" browser-pack-flat@"^3.0.0" browserify@"^17.0.0" bundle-collapser@"^1.3.0" c8@"^7.12.0" chai@"^3.5.0" cheerio@"^1.0.0-rc.12" commitizen@"^4.3.0" common-shakeify@"^0.6.0" conventional-changelog-conventionalcommits@"^5.0.0" doctrine@"^3.0.0" editorconfig-checker@"^6.0.0" envify@"^4.0.0" @stylistic/eslint-plugin-ts@"^2.13.0" eslint@"^9.0.0" eslint-plugin-n@"^17.17.0" eslint-plugin-expect-type@"^0.6.2" eslint-plugin-import@"^2.29.0" eslint-plugin-jsdoc@"^46.8.2" eslint-plugin-stdlib@"file:./etc/eslint/plugin" globals@"^16.1.0" exorcist@"^2.0.0" factor-bundle@"^2.5.0" gh-pages@"git+https://github.com/Planeshifter/gh-pages.git#main" inquirer@"^8.0.0" jscodeshift@"^0.15.0" jsdoc@"^3.4.0" lunr@"^2.3.9" mathjax-node@"^2.0.1" mathjax-node-sre@"^3.0.0" mkdirp@"^0.5.1" mustache@"^4.0.0" parse-link-header@"^1.0.1" plato@"^1.5.0" process@"^0.11.10" proxyquire@"^2.0.0" proxyquire-universal@"^2.0.0" proxyquireify@"^3.1.1" read-installed@"^4.0.3" rehype@"^9.0.0" rehype-highlight@"^3.0.0" remark@"^11.0.1" remark-cli@"^7.0.0" remark-frontmatter@"^1.2.0" remark-html@"^10.0.0" remark-lint@"^6.0.0" remark-lint-blockquote-indentation@"^1.0.0" remark-lint-checkbox-character-style@"^1.0.0" remark-lint-checkbox-content-indent@"^1.0.0" remark-lint-code-block-style@"^1.0.0" remark-lint-definition-case@"^1.0.0" remark-lint-definition-spacing@"^1.0.0" remark-lint-emphasis-marker@"^1.0.0" remark-lint-fenced-code-flag@"^1.0.0" remark-lint-fenced-code-marker@"^1.0.0" remark-lint-file-extension@"^1.0.0" remark-lint-final-definition@"^1.0.0" remark-lint-final-newline@"^1.0.0" remark-lint-first-heading-level@"^1.1.0" remark-lint-hard-break-spaces@"^1.0.1" remark-lint-heading-increment@"^1.0.0" remark-lint-heading-style@"^1.0.0" remark-lint-linebreak-style@"^1.0.0" remark-lint-link-title-style@"^1.0.0" remark-lint-list-item-bullet-indent@"^1.0.0" remark-lint-list-item-content-indent@"^1.0.0" remark-lint-list-item-indent@"^1.0.0" remark-lint-list-item-spacing@"^1.1.0" remark-lint-maximum-heading-length@"^1.0.0" remark-lint-maximum-line-length@"^1.0.0" remark-lint-no-auto-link-without-protocol@"^1.0.0" remark-lint-no-blockquote-without-marker@"^2.0.0" remark-lint-no-consecutive-blank-lines@"^1.0.0" remark-lint-no-duplicate-definitions@"^1.0.0" remark-lint-no-duplicate-headings@"^1.0.0" remark-lint-no-duplicate-headings-in-section@"^1.0.0" remark-lint-no-emphasis-as-heading@"^1.0.0" remark-lint-no-empty-url@"^1.0.1" remark-lint-no-file-name-articles@"^1.0.0" remark-lint-no-file-name-consecutive-dashes@"^1.0.0" remark-lint-no-file-name-irregular-characters@"^1.0.0" remark-lint-no-file-name-mixed-case@"^1.0.0" remark-lint-no-file-name-outer-dashes@"^1.0.1" remark-lint-no-heading-content-indent@"^1.0.0" remark-lint-no-heading-indent@"^1.0.0" remark-lint-no-heading-like-paragraph@"^1.0.0" remark-lint-no-heading-punctuation@"^1.0.0" remark-lint-no-html@"^1.0.0" remark-lint-no-inline-padding@"^1.0.0" remark-lint-no-literal-urls@"^1.0.0" remark-lint-no-missing-blank-lines@"^1.0.0" remark-lint-no-multiple-toplevel-headings@"^1.0.0" remark-lint-no-paragraph-content-indent@"^1.0.1" remark-lint-no-reference-like-url@"^1.0.0" remark-lint-no-shell-dollars@"^1.0.0" remark-lint-no-shortcut-reference-image@"^1.0.0" remark-lint-no-shortcut-reference-link@"^1.0.1" remark-lint-no-table-indentation@"^1.0.0" remark-lint-no-tabs@"^1.0.0" remark-lint-no-trailing-spaces@"^3.0.2" remark-lint-no-undefined-references@"^1.0.0" remark-lint-no-unused-definitions@"^1.0.0" remark-lint-ordered-list-marker-style@"^1.0.0" remark-lint-ordered-list-marker-value@"^1.0.0" remark-lint-rule-style@"^1.0.0" remark-lint-strong-marker@"^1.0.0" remark-lint-table-cell-padding@"^1.0.0" remark-lint-table-pipe-alignment@"^1.0.0" remark-lint-table-pipes@"^1.0.0" remark-lint-unordered-list-marker-style@"^1.0.0" remark-slug@"^5.0.0" remark-unlink@"^2.0.0" remark-validate-links@"^9.0.1" remark-vdom@"^8.0.0" semver@"^6.0.0" source-map-explorer@"^2.5.3" spdx-license-ids@"^3.0.0" tap-min@"git+https://github.com/Planeshifter/tap-min.git" tap-spec@"5.x.x" tap-summary@"^4.0.0" tap-xunit@"^2.2.0" tape@"git+https://github.com/kgryte/tape.git#fix/globby" to-vfile@"^6.0.0" typedoc@"git+https://github.com/kgryte/typedoc.git#0.16.11-patch" typescript@"4.9.5" uglify-js@"^3.17.4" uglifyify@"^5.0.0" unified-lint-rule@"^1.0.1" unist-util-visit@"^2.0.0" unist-util-visit-parents@"^3.1.1" yaml@"^1.0.0" node-gyp@"^9.3.1"
6 changes: 2 additions & 4 deletions etc/remark/plugins/eslint/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,13 @@ var join = require( 'path' ).join;
// VARIABLES //

var etc = resolve( __dirname, '..', '..', '..' );
var config = join( etc, 'eslint', '.eslintrc.markdown.js' );
var config = join( etc, 'eslint', 'eslint.flat.config.markdown.js' );
var eslint = resolve( etc, '..', 'lib', 'node_modules', '@stdlib', '_tools', 'remark', 'plugins', 'remark-lint-eslint' );
var opts = {
'config': config,
'rules': {
'stdlib/doctest': 'error' // enable otherwise disabled lint rule
},
'ignore': false,
'useEslintrc': false
}
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ function checkComment( source, comment ) {
if ( !token ) {
return 'Encountered an orphaned return annotation without a preceding node';
}
// Ignore annotations on the same line as the preceding token:
if ( comment.loc.start.line === token.loc.end.line ) {
return null;
}
// Check for orphaned annotation (preceding token is not on the same or previous line):
if ( comment.loc.start.line - token.loc.end.line > 1 ) {
return 'Encountered an orphaned return annotation without a preceding node';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,32 +47,6 @@ test = {
};
valid.push( test );

test = {
'code': [
' var value = [',
' {',
' \'a\': 1,',
' \'b\': true,',
' \'c\': [ 1, 2, 3 ]',
' }',
' ];',
' var out = copy( value );',
' /* returns',
' [',
' {',
' \'a\': 1,',
' \'b\': true,',
' \'c\': [ 1, 2, 3 ]',
' }',
' ]',
'*/',
'',
' var bool = ( value[0].c === out[0].c );',
' // returns false'
].join( '\n' )
};
valid.push( test );

test = {
'code': [
'var target = {',
Expand Down
12 changes: 11 additions & 1 deletion lib/node_modules/@stdlib/_tools/eslint/rules/doctest/lib/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ var proc = require( 'process' );
var join = require( 'path' ).join;
var format = require( 'util' ).format;
var dirname = require( 'path' ).dirname;
var extname = require( 'path' ).extname;
var logger = require( 'debug' );
var rootDir = require( '@stdlib/_tools/utils/root-dir' );
var Buffer = require( '@stdlib/buffer/ctor' );
Expand Down Expand Up @@ -162,6 +163,15 @@ function main( context ) {
'clearInterval': clearInterval,
'window': windowShim,
'Buffer': Buffer,

// Share the host realm's error constructors, as required modules are loaded in the host realm, meaning that, without sharing, `instanceof` checks on host-created errors would always fail within the sandbox:
'Error': Error,
'EvalError': EvalError,
'RangeError': RangeError,
'ReferenceError': ReferenceError,
'SyntaxError': SyntaxError,
'TypeError': TypeError,
'URIError': URIError,
'__dirname': dir,
'__filename': filename,
'console': {
Expand Down Expand Up @@ -327,7 +337,7 @@ function main( context ) {
};

// Do not report errors in `Markdown` fenced code blocks due to modules failing to load as implementations may not be available yet (readme-driven development):
if ( filename === '<text>' && contains( err.message, 'Cannot find module' ) ) {
if ( ( filename === '<text>' || extname( filename ) === '.md' ) && contains( err.message, 'Cannot find module' ) ) {
return;
}
report( loc, 'Encountered an error while running code: '+err.message );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@
"clearInterval",
"window",
"Buffer",
"Error",
"EvalError",
"RangeError",
"ReferenceError",
"SyntaxError",
"TypeError",
"URIError",
"__dirname",
"__filename",
"console"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ test = {
'var args = [ \'foo\' ];',
'var str = format( \'%s %s\', ...args );'
].join( '\n' ),
'parserOptions': {
'languageOptions': {
'ecmaVersion': 2018
}
};
Expand Down
Loading
Loading