From 2c0e0f2101f331a2e344e952c2a9f71e2bdad0a5 Mon Sep 17 00:00:00 2001 From: Rylan Date: Fri, 12 Jun 2026 16:58:03 +0800 Subject: [PATCH] chore: update prettier config in eslint --- .eslintignore | 1 + .eslintrc.js | 26 +++++++-- .prettierignore | 1 - .prettierrc.js | 39 ------------- .vscode/settings.json | 10 ++-- .../components/auto-complete/AutoComplete.tsx | 3 +- packages/components/badge/_example/color.tsx | 2 +- packages/components/button/Button.tsx | 3 +- .../components/cascader/components/Panel.tsx | 3 +- packages/components/cascader/interface.ts | 35 ++++++------ .../components/checkbox/CheckboxGroup.tsx | 3 +- .../color-picker/components/trigger.tsx | 6 +- .../components/date-picker/base/Table.tsx | 3 +- .../date-picker/panel/ExtraContent.tsx | 9 ++- .../date-picker/panel/SinglePanel.tsx | 9 ++- .../components/drawer/hooks/useLockStyle.ts | 2 +- packages/components/empty/Empty.tsx | 4 +- packages/components/hooks/useRipple.ts | 11 ++-- .../input-adornment/_example/select.tsx | 17 ++++-- .../input-adornment/_example/text.tsx | 2 +- packages/components/input/Input.tsx | 2 +- .../components/input/_example/disabled.tsx | 2 +- packages/components/input/_example/format.tsx | 2 +- .../input/_example/max-length-count.tsx | 2 +- packages/components/list/_example/size.tsx | 2 +- packages/components/list/_example/stripe.tsx | 2 +- .../list/hooks/useListVirtualScroll.ts | 6 +- packages/components/menu/MenuContext.ts | 6 +- packages/components/qrcode/QRCode.tsx | 4 +- packages/components/select/base/Option.tsx | 4 +- .../components/select/base/PopupContent.tsx | 55 ++++++++++++------- packages/components/table/interface.ts | 3 +- packages/components/tag/_example/shape.tsx | 2 +- packages/components/tag/_example/size.tsx | 2 +- packages/components/textarea/Textarea.tsx | 3 +- .../components/time-picker/TimePicker.tsx | 11 ++-- .../time-picker/TimeRangePicker.tsx | 6 +- .../time-picker/panel/SinglePanel.tsx | 6 +- packages/components/transfer/TransferList.tsx | 21 +++++-- .../components/tree-select/TreeSelect.tsx | 21 +++++-- .../tree/hooks/useTreeVirtualScroll.ts | 2 +- packages/components/tree/interface.ts | 36 ++++++------ .../typography/ellipsis/useEllipsis.tsx | 8 +-- 43 files changed, 216 insertions(+), 181 deletions(-) delete mode 100644 .prettierignore delete mode 100644 .prettierrc.js diff --git a/.eslintignore b/.eslintignore index 18e9f7cb20..f5a9cb43b9 100644 --- a/.eslintignore +++ b/.eslintignore @@ -14,3 +14,4 @@ temp* static/ packages/common packages/ai-core +site/engineering/static diff --git a/.eslintrc.js b/.eslintrc.js index 2ae538404a..df6451340a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,12 +1,12 @@ module.exports = { extends: [ 'airbnb-base', - 'prettier', // eslint-config-prettier 处理冲突 'plugin:react/recommended', 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', ], parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint', 'react-hooks', 'simple-import-sort'], + plugins: ['@typescript-eslint', 'react-hooks', 'simple-import-sort', 'prettier'], env: { browser: true, node: true, @@ -69,7 +69,25 @@ module.exports = { ], 'max-len': 'off', 'no-shadow': 'off', - + 'prettier/prettier': [ + 'error', + { + printWidth: 120, + tabWidth: 2, + useTabs: false, + semi: true, + singleQuote: true, + quoteProps: 'as-needed', + jsxSingleQuote: false, + trailingComma: 'all', + bracketSpacing: true, + jsxBracketSameLine: false, + arrowParens: 'always', + proseWrap: 'preserve', + htmlWhitespaceSensitivity: 'css', + endOfLine: 'lf', + }, + ], // import config 'import/order': 'off', 'import/extensions': 'off', @@ -103,7 +121,6 @@ module.exports = { }, ], 'simple-import-sort/exports': 'error', - // typescript config '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/ban-types': 'off', @@ -125,7 +142,6 @@ module.exports = { disallowTypeAnnotations: false, }, ], - // react config 'react/display-name': 'off', 'react-hooks/exhaustive-deps': 'warn', diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index fa9c16338e..0000000000 --- a/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -site/engineering/static \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index 5e922325a3..0000000000 --- a/.prettierrc.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = { - // 一行最多 120 字符 - printWidth: 120, - // 使用 2 个空格缩进 - tabWidth: 2, - // 不使用缩进符,而使用空格 - useTabs: false, - // 行尾需要有分号 - semi: true, - // 使用单引号 - singleQuote: true, - // 对象的 key 仅在必要时用引号 - quoteProps: 'as-needed', - // jsx 不使用单引号,而使用双引号 - jsxSingleQuote: false, - // 末尾需要有逗号 - trailingComma: 'all', - // 大括号内的首尾需要空格 - bracketSpacing: true, - // jsx 标签的反尖括号需要换行 - jsxBracketSameLine: false, - // 箭头函数,只有一个参数的时候,也需要括号 - arrowParens: 'always', - // 每个文件格式化的范围是文件的全部内容 - rangeStart: 0, - rangeEnd: Infinity, - // 不需要写文件开头的 @prettier - requirePragma: false, - // 不需要自动在文件开头插入 @prettier - insertPragma: false, - // 使用默认的折行标准 - proseWrap: 'preserve', - // 根据显示样式决定 html 要不要折行 - htmlWhitespaceSensitivity: 'css', - // vue 文件中的 script 和 style 内不用缩进 - vueIndentScriptAndStyle: false, - // 换行符使用 lf - endOfLine: 'lf', -}; diff --git a/.vscode/settings.json b/.vscode/settings.json index 5612f155f8..21faa3454b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,23 +3,23 @@ "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"], "[html]": { "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, "[typescriptreact]": { "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, "[javascriptreact]": { "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, "[typescript]": { "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, "[javascript]": { "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" diff --git a/packages/components/auto-complete/AutoComplete.tsx b/packages/components/auto-complete/AutoComplete.tsx index 2b308fd08a..14e96a0cac 100644 --- a/packages/components/auto-complete/AutoComplete.tsx +++ b/packages/components/auto-complete/AutoComplete.tsx @@ -17,8 +17,7 @@ import type { OptionsListProps } from './OptionList'; import type { AutoCompleteOption, TdAutoCompleteProps } from './type'; export interface AutoCompleteProps - extends TdAutoCompleteProps, - StyledProps {} + extends TdAutoCompleteProps, StyledProps {} export interface AutoCompleteRef { inputRef: InputRef; diff --git a/packages/components/badge/_example/color.tsx b/packages/components/badge/_example/color.tsx index 500e158182..7384493f67 100644 --- a/packages/components/badge/_example/color.tsx +++ b/packages/components/badge/_example/color.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState } from 'react'; import { Badge, Checkbox } from 'tdesign-react'; const colors = [ diff --git a/packages/components/button/Button.tsx b/packages/components/button/Button.tsx index 9d4b87abe2..f0746cc7f7 100644 --- a/packages/components/button/Button.tsx +++ b/packages/components/button/Button.tsx @@ -12,8 +12,7 @@ import { buttonDefaultProps } from './defaultProps'; import type { TdButtonProps } from './type'; export interface ButtonProps - extends TdButtonProps, - Omit, 'content' | 'shape' | 'size' | 'type'> {} + extends TdButtonProps, Omit, 'content' | 'shape' | 'size' | 'type'> {} const Button = forwardRef((originProps: ButtonProps, ref: React.RefObject) => { const props = useDefaultProps(originProps, buttonDefaultProps); diff --git a/packages/components/cascader/components/Panel.tsx b/packages/components/cascader/components/Panel.tsx index 5b973b526d..edee3fd667 100644 --- a/packages/components/cascader/components/Panel.tsx +++ b/packages/components/cascader/components/Panel.tsx @@ -13,8 +13,7 @@ import type { CascaderContextType, TreeNode } from '../interface'; import type { TdCascaderProps } from '../type'; export interface CascaderPanelProps - extends StyledProps, - Pick { + extends StyledProps, Pick { cascaderContext: CascaderContextType; } diff --git a/packages/components/cascader/interface.ts b/packages/components/cascader/interface.ts index ee13e287cc..c927779301 100644 --- a/packages/components/cascader/interface.ts +++ b/packages/components/cascader/interface.ts @@ -5,24 +5,23 @@ import type { TdSelectInputProps } from '../select-input/type'; import type { CascaderChangeSource, CascaderValue, TdCascaderProps } from './type'; export * from './type'; -export interface CascaderContextType - extends Pick< - TdCascaderProps, - | 'size' - | 'disabled' - | 'checkStrictly' - | 'lazy' - | 'multiple' - | 'filterable' - | 'filter' - | 'clearable' - | 'checkProps' - | 'showAllLevels' - | 'max' - | 'value' - | 'minCollapsedNum' - | 'valueType' - > { +export interface CascaderContextType extends Pick< + TdCascaderProps, + | 'size' + | 'disabled' + | 'checkStrictly' + | 'lazy' + | 'multiple' + | 'filterable' + | 'filter' + | 'clearable' + | 'checkProps' + | 'showAllLevels' + | 'max' + | 'value' + | 'minCollapsedNum' + | 'valueType' +> { treeStore: TreeStore; setValue: (val: CascaderValue, source: CascaderChangeSource, node?: TreeNodeModel) => void; visible: boolean; diff --git a/packages/components/checkbox/CheckboxGroup.tsx b/packages/components/checkbox/CheckboxGroup.tsx index db464f5ebf..24e84c3a7f 100644 --- a/packages/components/checkbox/CheckboxGroup.tsx +++ b/packages/components/checkbox/CheckboxGroup.tsx @@ -22,8 +22,7 @@ import type { } from './type'; export interface CheckboxGroupProps - extends TdCheckboxGroupProps, - StyledProps { + extends TdCheckboxGroupProps, StyledProps { children?: React.ReactNode; } diff --git a/packages/components/color-picker/components/trigger.tsx b/packages/components/color-picker/components/trigger.tsx index 2de05b647f..d508f7dab4 100644 --- a/packages/components/color-picker/components/trigger.tsx +++ b/packages/components/color-picker/components/trigger.tsx @@ -9,8 +9,10 @@ import useClassName from '../hooks/useClassNames'; import type { TdColorPickerProps } from '..'; import type { TdColorContext } from '../interface'; -export interface ColorTriggerProps - extends Pick { +export interface ColorTriggerProps extends Pick< + TdColorPickerProps, + 'disabled' | 'inputProps' | 'borderless' | 'clearable' | 'onClear' +> { value?: string; onChange?: (v?: string, context?: TdColorContext) => {}; } diff --git a/packages/components/date-picker/base/Table.tsx b/packages/components/date-picker/base/Table.tsx index c2abc3f746..ac69807a9e 100644 --- a/packages/components/date-picker/base/Table.tsx +++ b/packages/components/date-picker/base/Table.tsx @@ -16,7 +16,8 @@ import type { DateMultipleValue, DateRangeValue, DateValue, TdDatePickerProps } dayjs.extend(isoWeek); export interface DatePickerTableProps - extends Pick, + extends + Pick, Pick, Pick { data?: Array; diff --git a/packages/components/date-picker/panel/ExtraContent.tsx b/packages/components/date-picker/panel/ExtraContent.tsx index b9a728d2ab..fd8aa2acd6 100644 --- a/packages/components/date-picker/panel/ExtraContent.tsx +++ b/packages/components/date-picker/panel/ExtraContent.tsx @@ -5,11 +5,10 @@ import DateFooter from '../base/Footer'; import type { DateMultipleValue, DateValue, TdDatePickerProps, TdDateRangePickerProps } from '../type'; import type { SinglePanelProps } from './SinglePanel'; -export interface ExtraContentProps - extends Pick< - SinglePanelProps, - 'enableTimePicker' | 'presetsPlacement' | 'onPresetClick' | 'onConfirmClick' | 'needConfirm' - > { +export interface ExtraContentProps extends Pick< + SinglePanelProps, + 'enableTimePicker' | 'presetsPlacement' | 'onPresetClick' | 'onConfirmClick' | 'needConfirm' +> { selectedValue?: DateValue | DateMultipleValue; presets?: TdDatePickerProps['presets'] | TdDateRangePickerProps['presets']; onTimeModeChange?: () => void; diff --git a/packages/components/date-picker/panel/SinglePanel.tsx b/packages/components/date-picker/panel/SinglePanel.tsx index 5976f72421..9dd6dc3a47 100644 --- a/packages/components/date-picker/panel/SinglePanel.tsx +++ b/packages/components/date-picker/panel/SinglePanel.tsx @@ -16,8 +16,7 @@ import type { TdTimePickerProps } from '../../time-picker'; import type { DateValue, TdDatePickerProps, TdDateRangePickerProps } from '../type'; export interface SinglePanelProps - extends Omit, - StyledProps { + extends Omit, StyledProps { year?: number; month?: number; time?: string; @@ -65,7 +64,11 @@ const SinglePanel = forwardRef((originalProps, enableTimePicker: props.enableTimePicker, }); - const disableDateOptions = useDisableDate({ disableDate: props.disableDate, mode: props.mode, format }); + const disableDateOptions = useDisableDate({ + disableDate: props.disableDate, + mode: props.mode, + format, + }); const disableTimeOptions: TdTimePickerProps['disableTime'] = (h: number, m: number, s: number, ms: number) => { if (!isFunction(disableTime) || !value) { diff --git a/packages/components/drawer/hooks/useLockStyle.ts b/packages/components/drawer/hooks/useLockStyle.ts index 4a6849d412..748476e701 100644 --- a/packages/components/drawer/hooks/useLockStyle.ts +++ b/packages/components/drawer/hooks/useLockStyle.ts @@ -25,7 +25,7 @@ export default function useLockStyle(props) { left: `margin: 0 0 0 ${sizeValue}`, right: `margin: 0 0 0 -${sizeValue}`, bottom: `margin: -${sizeValue} 0 0 0`, - }[placement]), + })[placement], [placement, sizeValue], ); diff --git a/packages/components/empty/Empty.tsx b/packages/components/empty/Empty.tsx index c78ce3f960..92ec8adbcb 100644 --- a/packages/components/empty/Empty.tsx +++ b/packages/components/empty/Empty.tsx @@ -89,8 +89,8 @@ const Empty: React.FC = (props) => { const typeImageProps = defaultMaps[type] ?? null; const { image, description, title } = { - image: propsImage ? propsImage : typeImageProps?.image ?? null, - title: propsTitle ? propsTitle : typeImageProps?.title ?? null, + image: propsImage ? propsImage : (typeImageProps?.image ?? null), + title: propsTitle ? propsTitle : (typeImageProps?.title ?? null), description: propsDescription, }; diff --git a/packages/components/hooks/useRipple.ts b/packages/components/hooks/useRipple.ts index f8f857d389..9434168a7a 100644 --- a/packages/components/hooks/useRipple.ts +++ b/packages/components/hooks/useRipple.ts @@ -132,10 +132,13 @@ export default function useRipple(el: HTMLElement, fixedRippleColor?: string): v el.removeEventListener('pointerup', handleClearRipple, false); el.removeEventListener('pointerleave', handleClearRipple, false); - setTimeout(() => { - ripple.remove(); - if (rippleContainer.children.length === 0) rippleContainer.remove(); - }, period * 2 + 100); + setTimeout( + () => { + ripple.remove(); + if (rippleContainer.children.length === 0) rippleContainer.remove(); + }, + period * 2 + 100, + ); }; el.addEventListener('pointerup', handleClearRipple, false); diff --git a/packages/components/input-adornment/_example/select.tsx b/packages/components/input-adornment/_example/select.tsx index c5d0343d55..14bb148ea1 100644 --- a/packages/components/input-adornment/_example/select.tsx +++ b/packages/components/input-adornment/_example/select.tsx @@ -1,11 +1,14 @@ -import React from 'react'; +import React from 'react'; import { Input, InputAdornment, Select, Space } from 'tdesign-react'; export default function BaseExample() { const protocolSelect = ( ({ label: value, value }))} + options={['.com', '.cn', '.net', '.org'].map((value) => ({ + label: value, + value, + }))} defaultValue=".cn" /> ); @@ -30,7 +36,10 @@ export default function BaseExample() {