Signal-Desktop/danger/rules/migrateBackboneToRedux.ts

55 lines
1.4 KiB
TypeScript

// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { Line, Rule } from 'endanger';
export default function migrateBackboneToRedux() {
return new Rule({
match: {
files: ['**/*.{js,jsx,ts,tsx}'],
},
messages: {
foundNewBackboneFile: `
**Prefer Redux**
Don't create new Backbone files, use Redux
`,
foundBackboneFileWithManyChanges: `
**Prefer Redux**
Migrate Backbone files to Redux when making major changes
`,
},
async run({ files, context }) {
for (let file of files.touched) {
let lines = await file.lines();
let matchedLine: Line | null = null;
for (let line of lines) {
// Check for the most stable part of the backbone `import`
if (
(await line.contains("from 'backbone'")) ||
(await line.contains('window.Backbone'))
) {
matchedLine = line;
break;
}
}
if (!matchedLine) {
continue;
}
if (file.created) {
context.warn('foundNewBackboneFile', { file, line: matchedLine });
} else if (file.modifiedOnly) {
if (await file.diff().changedBy({ added: 0.1 })) {
context.warn('foundBackboneFileWithManyChanges', {
file,
line: matchedLine,
});
}
}
}
},
});
}