Skip to content

Commit 44ba28d

Browse files
authored
Dependencies upgrade (eslint-rules) (#3971)
* Add verification and fix for other yarn.lock * eslint-rules - update babel-eslint and remove unused deps * eslint-rules - update eslint * eslint-rules - update mocha * Infra/update eslint to v7 (#3972) * Rename to clearer names * eslint-rules - upgrade eslint to v7 * eslint-rules - function-deprecation - fix the fixer * eslint-rules - typography-deprecation - fix the fixer * eslint-rules - bump major version * Update yarn.lock * eslint-rules - function-deprecation - fix the fixer (edge case from Codex)
1 parent 3ec6857 commit 44ba28d

15 files changed

Lines changed: 1787 additions & 4836 deletions

eslint-rules/lib/rules/function-deprecation.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,18 @@ module.exports = {
6666
// console.warn('from', node.arguments[options.argumentIndex]);
6767
const prop = _.find(node.arguments[options.argumentIndex].properties, prop => prop.key.name === options.prop);
6868
const propIndex = node.arguments[options.argumentIndex].properties.indexOf(prop);
69-
fixed = fixer.replaceText(node.arguments[options.argumentIndex].properties[propIndex], fix)
69+
fixed = fixer.replaceText(node.arguments[options.argumentIndex].properties[propIndex].key, fix)
7070
// console.warn('to', fixed);
7171
return fixed;
7272
case FIX_TYPES.FUNCTION_NAME:
7373
if (node.type === "ImportDeclaration") {
7474
// console.warn('fix function import');
7575
const index = getSpecifierIndex(node, options.name);
76+
// Check if the target name already exists to avoid duplicate identifiers
77+
const targetExists = node.specifiers.some((s, i) => i !== index && s.local.name === fix);
78+
if (targetExists) {
79+
return null;
80+
}
7681
// console.warn('from', node.specifiers[index]);
7782
fixed = fixer.replaceText(node.specifiers[index], fix);
7883
// console.warn('to', fixed);

eslint-rules/lib/rules/typography-deprecation.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ module.exports = {
4141
fix(fixer) {
4242
if (options.fix) {
4343
const fix = useShortVersion ? options.fix.substr(`${defaultImportName}.`.length) : options.fix;
44-
return fixer.replaceText(node, fix);
44+
const fixNode = useShortVersion && node.name ? node.name : node;
45+
return fixer.replaceText(fixNode, fix);
4546
}
4647
}
4748
});

eslint-rules/package.json

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "eslint-plugin-uilib",
3-
"version": "2.2.4",
3+
"version": "3.0.0",
44
"description": "uilib set of eslint rules",
55
"keywords": [
66
"eslint",
@@ -27,19 +27,13 @@
2727
"requireindex": "~1.1.0"
2828
},
2929
"devDependencies": {
30-
"babel-cli": "^6.23.0",
31-
"babel-eslint": "^7.0.0",
32-
"babel-jest": "^25.5.1",
33-
"babel-preset-es2015": "^6.22.0",
34-
"babel-preset-react": "^6.22.0",
35-
"babel-preset-react-native": "1.9.1",
36-
"eslint": "^4.18.2",
37-
"eslint-config-standard": "^11.0.0",
38-
"eslint-plugin-import": "^2.9.0",
39-
"eslint-plugin-node": "^6.0.1",
40-
"eslint-plugin-promise": "^3.7.0",
41-
"eslint-plugin-standard": "^3.0.1",
42-
"mocha": "7.1.2",
30+
"babel-eslint": "^10.1.0",
31+
"eslint": "^7.0.0",
32+
"eslint-config-standard": "^16.0.0",
33+
"eslint-plugin-import": "^2.22.1",
34+
"eslint-plugin-node": "^11.1.0",
35+
"eslint-plugin-promise": "^5.0.0",
36+
"mocha": "^10.8.2",
4337
"shell-utils": "^1.0.10"
4438
},
4539
"engines": {

eslint-rules/tests/lib/rules/assets-deprecation.js

Lines changed: 54 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const rule = require('../../../lib/rules/assets-deprecation');
33
const deprecationsJson = require('../../assets_deprecation.json');
44

55
RuleTester.setDefaultConfig({
6-
parser: 'babel-eslint',
6+
parser: require.resolve('babel-eslint'),
77
parserOptions: {ecmaVersion: 6, ecmaFeatures: {jsx: true}}
88
});
99

@@ -205,6 +205,23 @@ class Example extends React.Component {
205205
206206
export default Example;`;
207207

208+
const partialClassTest1 = `
209+
function createImages() {
210+
const IDs1 = require('my-ids-1');
211+
const {Assets} = require('${ourSource}');
212+
const IDs2 = require('my-ids-2');
213+
214+
const images = {};
215+
images[IDs1.ID1] = Assets.icons.valid;
216+
images[IDs1.ID2] = Assets.icons.deprecated;
217+
images[IDs1.ID3] = Assets.icons.general.valid;
218+
images[IDs1.ID4] = require('../../images/image1.png');
219+
images[IDs2.ID5] = require('../../images/image2.png');
220+
images[IDs2.ID6] = Assets.icons.general.valid2;
221+
images[IDs2.ID7] = Assets.icons.valid2;
222+
return images;
223+
}`;
224+
208225
const error =
209226
"'Assets.icons.deprecated' is deprecated. Please use 'Assets.icons.general.valid' instead (fix is available).";
210227
const errorDate = ' Please fix this issue by 2 November, Friday!';
@@ -276,119 +293,115 @@ ruleTester.run('assets-deprecation', rule, {
276293
{
277294
options: options,
278295
code: `${ourImport} ${constDeprecated1}`,
279-
output: `${ourImport} const assets = Assets.icons.general.valid;`,
296+
output: `${ourImport} ${constValid1}`,
280297
errors: [{message: error}]
281298
},
282299
{
283300
options: optionsWithDate,
284301
code: `${ourImport} ${constDeprecated1}`,
285-
output: `${ourImport} const assets = Assets.icons.general.valid;`,
302+
output: `${ourImport} ${constValid1}`,
286303
errors: [{message: error + errorDate}]
287304
},
288305
{
289306
options: optionsWithDate,
290307
code: `${ourImport} ${constDeprecated2}`,
291-
output: `${ourImport} const assets = <Button iconSource={Assets.icons.general.valid}/>;`,
308+
output: `${ourImport} ${constValid2}`,
292309
errors: [{message: error + errorDate}]
293310
},
294311
{
295312
options: options,
296313
code: `${ourImport} ${jsxDeprecated1} ${jsx1}`,
297-
output: `${ourImport} const others = {iconSource: Assets.icons.general.valid}; ${jsx1}`,
314+
output: `${ourImport} ${jsxValid1} ${jsx1}`,
298315
errors: [{message: error}]
299316
},
300317
{
301318
options: options,
302319
code: `${ourImport} ${jsxDeprecated2}`,
303-
output: `${ourImport} <Button iconSource={Assets.icons.general.valid}/>`,
320+
output: `${ourImport} ${jsxValid2}`,
304321
errors: [{message: error}]
305322
},
306323
{
307324
options: options,
308325
code: `${ourImport} ${jsxDeprecated3}`,
309-
output: `${ourImport} <View><Button iconSource={Assets.icons.general.valid}/></View>`,
326+
output: `${ourImport} ${jsxValid3}`,
310327
errors: [{message: error}]
311328
},
312329
{
313330
options: options,
314331
code: `${ourImport} ${jsxDeprecated4}`,
315-
output: `${ourImport} const others = {iconSource: Assets.icons.general.valid}; const test = <Button {...others}/>`,
332+
output: `${ourImport} ${jsxValid4}`,
316333
errors: [{message: error}]
317334
},
318335
{
319336
options: options,
320337
code: `${fullClassDeprecated}`,
338+
output: `${fullClassValid}`,
321339
errors: [{message: error}, {message: error}, {message: error}]
322340
},
323341
{
324342
options: options,
325343
code: `${ourImportRenamed} ${constDeprecatedRenamed1}`,
326-
output: `${ourImportRenamed} const assets = UIAssets.icons.general.valid;`,
344+
output: `${ourImportRenamed} ${constValidRenamed1}`,
327345
errors: [{message: error}]
328346
},
329347
{
330348
options: optionsWithDate,
331349
code: `${ourImportRenamed} ${constDeprecatedRenamed1}`,
350+
output: `${ourImportRenamed} ${constValidRenamed1}`,
332351
errors: [{message: error + errorDate}]
333352
},
334353
{
335354
options: optionsWithDate,
336355
code: `${ourImportRenamed} ${constDeprecatedRenamed2}`,
356+
output: `${ourImportRenamed} ${constValidRenamed2}`,
337357
errors: [{message: error + errorDate}]
338358
},
339359
{
340360
options: options,
341361
code: `${ourImportRenamed} ${jsxDeprecatedRenamed1} ${jsx1}`,
362+
output: `${ourImportRenamed} ${jsxValidRenamed1} ${jsx1}`,
342363
errors: [{message: error}]
343364
},
344365
{
345366
options: options,
346367
code: `${ourImportRenamed} ${jsxDeprecatedRenamed2}`,
368+
output: `${ourImportRenamed} ${jsxValidRenamed2}`,
347369
errors: [{message: error}]
348370
},
349371
{
350372
options: options,
351373
code: `${ourImportRenamed} ${jsxDeprecatedRenamed3}`,
374+
output: `${ourImportRenamed} ${jsxValidRenamed3}`,
352375
errors: [{message: error}]
353376
},
354377
{
355378
options: options,
356379
code: `${ourImportRenamed} ${jsxDeprecatedRenamed4}`,
380+
output: `${ourImportRenamed} ${jsxValidRenamed4}`,
357381
errors: [{message: error}]
358382
},
359383
{
360384
options: options,
361385
code: `${fullClassDeprecatedRenamed}`,
386+
output: `${fullClassValidRenamed}`,
362387
errors: [{message: error}, {message: error}, {message: error}]
363388
},
364389
{
365390
options: options,
366391
code: `${fullClassTest1}`,
392+
output: fullClassTest1.replace('Assets.icons.deprecated', 'Assets.icons.general.valid'),
367393
errors: [{message: error}]
368394
},
369395
{
370396
options: options,
371397
code: `${fullClassTest2}`,
398+
output: fullClassTest2.replace('Assets.icons.deprecated', 'Assets.icons.general.valid'),
372399
errors: [{message: error}]
373400
},
374401
{
375402
options: options,
376-
code: `
377-
function createImages() {
378-
const IDs1 = require('my-ids-1');
379-
const {Assets} = require('${ourSource}');
380-
const IDs2 = require('my-ids-2');
381-
382-
const images = {};
383-
images[IDs1.ID1] = Assets.icons.valid;
384-
images[IDs1.ID2] = Assets.icons.deprecated;
385-
images[IDs1.ID3] = Assets.icons.general.valid;
386-
images[IDs1.ID4] = require('../../images/image1.png');
387-
images[IDs2.ID5] = require('../../images/image2.png');
388-
images[IDs2.ID6] = Assets.icons.general.valid2;
389-
images[IDs2.ID7] = Assets.icons.valid2;
390-
return images;
391-
}`,
403+
code: `${partialClassTest1}`,
404+
output: partialClassTest1.replace('Assets.icons.deprecated', 'Assets.icons.general.valid'),
392405
errors: [{message: error}]
393406
},
394407
{
@@ -400,6 +413,14 @@ const props = {
400413
title: 'title',
401414
subtitle: 'subtitle',
402415
icon: Assets.icons.deprecated
416+
};`,
417+
output: `
418+
${ourImport}
419+
420+
const props = {
421+
title: 'title',
422+
subtitle: 'subtitle',
423+
icon: Assets.icons.general.valid
403424
};`,
404425
errors: [{message: error}]
405426
},
@@ -412,6 +433,14 @@ const props = {
412433
title: 'title',
413434
subtitle: 'subtitle',
414435
icon: Assets.icons['deprecated']
436+
};`,
437+
output: `
438+
${ourImport}
439+
440+
const props = {
441+
title: 'title',
442+
subtitle: 'subtitle',
443+
icon: Assets.icons.general.valid
415444
};`,
416445
errors: [{message: error}]
417446
}

eslint-rules/tests/lib/rules/component-deprecation.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const rule = require('../../../lib/rules/component-deprecation');
33
const deprecationsJson = require('../../component_deprecation.json');
44

55
RuleTester.setDefaultConfig({
6-
parser: 'babel-eslint',
6+
parser: require.resolve('babel-eslint'),
77
parserOptions: {ecmaVersion: 6, ecmaFeatures: {jsx: true}}
88
});
99

@@ -12,6 +12,8 @@ const ruleTester = new RuleTester();
1212
const ruleOptions = [{deprecations: deprecationsJson}];
1313
const invalidExample =
1414
"import {Avatar} from 'module-with-deprecations'; const test = <Avatar url={'some_uri_string'}/>";
15+
const invalidExampleOutput =
16+
"import {Picture} from 'module-with-deprecations'; const test = <Picture url={'some_uri_string'}/>";
1517

1618
// NOTE: Deprecated components will error at import and again if used as jsx tag.
1719
// KNOWN BUG: usages such as module.List.Item will not be fixed (not supported ATM)
@@ -113,6 +115,7 @@ ruleTester.run('component-deprecation', rule, {
113115
{
114116
options: ruleOptions,
115117
code: invalidExample,
118+
output: invalidExampleOutput,
116119
errors: [
117120
{message: "The 'Avatar' component is deprecated. Please use the 'Picture' component instead."},
118121
{message: "The 'Avatar' component is deprecated. Please use the 'Picture' component instead."}
@@ -121,6 +124,7 @@ ruleTester.run('component-deprecation', rule, {
121124
{
122125
options: [{...ruleOptions[0], dueDate: '10/11/18'}],
123126
code: invalidExample,
127+
output: invalidExampleOutput,
124128
errors: [
125129
{
126130
message:

eslint-rules/tests/lib/rules/component-prop-deprecation.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const fs = require('fs');
55
const bigExample = fs.readFileSync('../demo/src/screens/componentScreens/AvatarsScreen.tsx', 'utf8');
66

77
RuleTester.setDefaultConfig({
8-
parser: 'babel-eslint',
8+
parser: require.resolve('babel-eslint'),
99
parserOptions: {ecmaVersion: 6, ecmaFeatures: {jsx: true}}
1010
});
1111

0 commit comments

Comments
 (0)