From 1292e80d4000a1a19beaa19621586938cb630bf0 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Sat, 8 Sep 2018 22:41:02 +0100 Subject: [PATCH] resourceloader: Configure eslint to disallow $ and require inside startup Would help statically detect accidental use of jQuery ($) before it is defined within startup. It would also let ESLint in my editor catch the issue I keep running into where I use a local variable called 'module' in mediawiki.js before it is defined, which it doesn't detect because 'module' is whitelisted in the project's main .eslintrc file. None of the predefined globals for regular modules are available inside the startup module. Follows-up dec800968. Bug: T192623 Change-Id: Icc102d59fff8eb7cd3f4d55f5c8b64866f2bc8af --- resources/src/startup/.eslintrc.json | 10 ++++++++++ resources/src/startup/mediawiki.log.js | 2 +- resources/src/startup/mediawiki.requestIdleCallback.js | 4 +++- resources/src/startup/profiler.js | 1 + resources/src/startup/startup.js | 1 + 5 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 resources/src/startup/.eslintrc.json diff --git a/resources/src/startup/.eslintrc.json b/resources/src/startup/.eslintrc.json new file mode 100644 index 0000000000..c085e6085f --- /dev/null +++ b/resources/src/startup/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "root": true, + "extends": "wikimedia", + "env": { + "browser": true + }, + "rules": { + "max-len": 0 + } +} diff --git a/resources/src/startup/mediawiki.log.js b/resources/src/startup/mediawiki.log.js index af59c7f943..9283b1665a 100644 --- a/resources/src/startup/mediawiki.log.js +++ b/resources/src/startup/mediawiki.log.js @@ -7,7 +7,7 @@ * @author Trevor Parscal */ ( function () { - /* global console */ + /* global console, mw */ /* eslint-disable no-console */ var original = mw.log; diff --git a/resources/src/startup/mediawiki.requestIdleCallback.js b/resources/src/startup/mediawiki.requestIdleCallback.js index 9f8c598876..afb4737631 100644 --- a/resources/src/startup/mediawiki.requestIdleCallback.js +++ b/resources/src/startup/mediawiki.requestIdleCallback.js @@ -1,3 +1,4 @@ +/* global mw */ ( function () { var maxBusy = 50; @@ -44,7 +45,8 @@ * by that time. */ mw.requestIdleCallback = window.requestIdleCallback ? - window.requestIdleCallback.bind( window ) : // Bind because it throws TypeError if context is not window + // Bind because it throws TypeError if context is not window + window.requestIdleCallback.bind( window ) : mw.requestIdleCallbackInternal; // Note: Polyfill was previously disabled due to // https://bugs.chromium.org/p/chromium/issues/detail?id=647870 diff --git a/resources/src/startup/profiler.js b/resources/src/startup/profiler.js index 588750cce0..5e9b6ab2a6 100644 --- a/resources/src/startup/profiler.js +++ b/resources/src/startup/profiler.js @@ -4,6 +4,7 @@ * @author Timo Tijhof * @since 1.32 */ +/* global mw */ ( function () { 'use strict'; diff --git a/resources/src/startup/startup.js b/resources/src/startup/startup.js index 8e75535b2a..5483ad23e8 100644 --- a/resources/src/startup/startup.js +++ b/resources/src/startup/startup.js @@ -110,6 +110,7 @@ if ( !isCompatible() ) { * The $CODE and $VARS placeholders are substituted in ResourceLoaderStartUpModule.php. */ ( function () { + /* global mw */ mw.config = new mw.Map( $VARS.wgLegacyJavaScriptGlobals ); $CODE.registrations(); -- 2.20.1