Merge pull request #30703 from overleaf/ae-prettier

Upgrade Prettier to v3.7.4

GitOrigin-RevId: 0f4434019bc7d12f2d5b7ecbb833ee20570d0706
This commit is contained in:
Alf Eaton
2026-01-16 09:16:29 +00:00
committed by Copybot
parent 3f19aaa58e
commit 03a3518aae
36 changed files with 144 additions and 137 deletions

View File

@@ -3,7 +3,8 @@ module.exports = {
type: 'problem',
fixable: null,
docs: {
description: 'Require loadingLabel prop when isLoading is specified on OLButton',
description:
'Require loadingLabel prop when isLoading is specified on OLButton',
},
schema: [],
},
@@ -11,10 +12,7 @@ module.exports = {
return {
'JSXOpeningElement[name.name="OLButton"]'(node) {
const attributes = new Map(
node.attributes.map(attr => [
attr.name?.name,
attr
])
node.attributes.map(attr => [attr.name?.name, attr])
)
const isLoadingAttr = attributes.get('isLoading')
@@ -26,12 +24,13 @@ module.exports = {
if (
!isLoadingValue ||
(isLoadingValue.type === 'JSXExpressionContainer' &&
isLoadingValue.expression.type === 'Literal' &&
isLoadingValue.expression.value === true)
isLoadingValue.expression.type === 'Literal' &&
isLoadingValue.expression.value === true)
) {
context.report({
node: isLoadingAttr,
message: 'Button with isLoading prop must also specify loadingLabel',
message:
'Button with isLoading prop must also specify loadingLabel',
})
} else if (
isLoadingValue.type === 'JSXExpressionContainer' &&
@@ -39,7 +38,8 @@ module.exports = {
) {
context.report({
node: isLoadingAttr,
message: 'Button with isLoading prop must also specify loadingLabel',
message:
'Button with isLoading prop must also specify loadingLabel',
})
}
}

View File

@@ -1,5 +1,5 @@
const path = require('node:path');
const fs = require('node:fs');
const path = require('node:path')
const fs = require('node:fs')
module.exports = {
meta: {
@@ -14,26 +14,39 @@ module.exports = {
hasSuggestions: true,
schema: [],
messages: {
unresolvablePath: 'The path "{{pathValue}}" in vi.doMock() cannot be resolved relative to the current file.',
notAStringLiteral: 'The first argument of vi.doMock() must be (or resolve to) a string literal representing a path.',
unresolvablePath:
'The path "{{pathValue}}" in vi.doMock() cannot be resolved relative to the current file.',
notAStringLiteral:
'The first argument of vi.doMock() must be (or resolve to) a string literal representing a path.',
noArguments: 'vi.doMock() called with no arguments.',
},
},
create(context) {
const currentFilePath = context.getFilename();
const currentFilePath = context.getFilename()
// ESLint can sometimes pass <text> or <input> for snippets not in a file
if (currentFilePath === '<text>' || currentFilePath === '<input>') {
return {}
}
const currentDirectory = path.dirname(currentFilePath);
const currentDirectory = path.dirname(currentFilePath)
function canResolve(modulePath) {
try {
require.resolve(path.resolve(currentDirectory, modulePath));
return true;
require.resolve(path.resolve(currentDirectory, modulePath))
return true
} catch (e) {
const absolutePath = path.resolve(currentDirectory, modulePath);
const extensions = ['', '.js', '.mjs', '.ts', '.jsx', '.tsx', '.json', '.node', '/index.js', '/index.ts']; // Add common extensions
const absolutePath = path.resolve(currentDirectory, modulePath)
const extensions = [
'',
'.js',
'.mjs',
'.ts',
'.jsx',
'.tsx',
'.json',
'.node',
'/index.js',
'/index.ts',
] // Add common extensions
for (const ext of extensions) {
if (fs.existsSync(absolutePath + ext)) {
return true
@@ -63,9 +76,14 @@ module.exports = {
const firstArg = node.arguments[0]
let pathValue = firstArg.value
if (firstArg.type !== 'Literal' || typeof firstArg.value !== 'string') {
if (
firstArg.type !== 'Literal' ||
typeof firstArg.value !== 'string'
) {
if (firstArg.type === 'Identifier') {
const variable = context.getScope().variables.find(v => v.name === firstArg.name);
const variable = context
.getScope()
.variables.find(v => v.name === firstArg.name)
if (
variable &&
variable.defs.length > 0 &&
@@ -80,15 +98,13 @@ module.exports = {
// If the first argument was a variable that didn't resolve then we can't auto-fix it
}
}
context.report({
node: firstArg,
messageId: 'notAStringLiteral',
})
return
context.report({
node: firstArg,
messageId: 'notAStringLiteral',
})
return
}
if (!pathValue.startsWith('.')) {
return
}
@@ -97,12 +113,13 @@ module.exports = {
const mjsPath = pathValue.replace('.js', '.mjs')
const additionalReportOptions = {}
if (canResolve(mjsPath)) {
additionalReportOptions.fix = (fixer) => fixer.replaceText(firstArg, `'${mjsPath}'`)
additionalReportOptions.fix = fixer =>
fixer.replaceText(firstArg, `'${mjsPath}'`)
additionalReportOptions.suggest = [
{
desc: `Replace with "${pathValue.replace('.js', '.mjs')}"`,
fix: (fixer) => fixer.replaceText(firstArg, `'${mjsPath}'`),
}
fix: fixer => fixer.replaceText(firstArg, `'${mjsPath}'`),
},
]
}
context.report({
@@ -111,11 +128,11 @@ module.exports = {
data: {
pathValue,
},
...additionalReportOptions
...additionalReportOptions,
})
}
}
},
}
},
};
}

View File

@@ -136,26 +136,33 @@ ruleTester.run('domock-require-valid-path', viDoMockValidPath, {
valid: [
{
code: 'vi.doMock("./require-vi-doMock-valid-path.js")',
filename: __filename
filename: __filename,
},
{
code: 'const filename = "./require-vi-doMock-valid-path.js"; vi.doMock(filename);',
filename: __filename
}
filename: __filename,
},
],
invalid: [
{
code: "vi.doMock('./require-vi-doMock-valid-path2')",
filename: __filename,
errors: [
{
message:
'The path "./require-vi-doMock-valid-path2" in vi.doMock() cannot be resolved relative to the current file.',
},
],
},
{
code: 'const filename = "./require-vi-doMock-valid-path2.js"; vi.doMock(filename);',
filename: __filename,
errors: [
{
message:
'The first argument of vi.doMock() must be (or resolve to) a string literal representing a path.',
},
],
},
],
invalid: [{
code: "vi.doMock('./require-vi-doMock-valid-path2')",
filename: __filename,
errors: [
{
message: 'The path "./require-vi-doMock-valid-path2" in vi.doMock() cannot be resolved relative to the current file.'}
]
}, {
code: 'const filename = "./require-vi-doMock-valid-path2.js"; vi.doMock(filename);',
filename: __filename,
errors: [
{
message: 'The first argument of vi.doMock() must be (or resolve to) a string literal representing a path.'}
]
}]
})