biome.json 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. {
  2. "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
  3. "vcs": {
  4. "enabled": true,
  5. "clientKind": "git",
  6. "useIgnoreFile": true,
  7. "defaultBranch": "master"
  8. },
  9. "organizeImports": {
  10. "enabled": false
  11. },
  12. "linter": {
  13. "enabled": true,
  14. "rules": {
  15. "recommended": false,
  16. "a11y": {
  17. "noBlankTarget": "error"
  18. },
  19. "correctness": {
  20. "noGlobalObjectCalls": "error",
  21. "noUnreachable": "error",
  22. "useHookAtTopLevel": "error",
  23. "useIsNan": "error",
  24. "noUnusedPrivateClassMembers": "error",
  25. "noInvalidUseBeforeDeclaration": "error",
  26. "noNodejsModules": "error"
  27. },
  28. "complexity": {
  29. "useFlatMap": "error",
  30. "useOptionalChain": "error",
  31. "noEmptyTypeParameters": "error",
  32. "noUselessLoneBlockStatements": "error",
  33. "noUselessEmptyExport": "error",
  34. "noUselessConstructor": "error",
  35. "noUselessTypeConstraint": "error",
  36. "noExcessiveNestedTestSuites": "error"
  37. },
  38. "nursery": {
  39. "noRestrictedImports": {
  40. "level": "warn",
  41. "options": {
  42. "paths": {
  43. "react-router": "Do not import from react-router. While we transition to 6 there are shims to import from"
  44. }
  45. }
  46. }
  47. },
  48. "performance": {
  49. "noBarrelFile": "error"
  50. },
  51. "security": {
  52. "noDangerouslySetInnerHtmlWithChildren": "error"
  53. },
  54. "suspicious": {
  55. "noDebugger": "error",
  56. "noDoubleEquals": "error",
  57. "noDuplicateJsxProps": "error",
  58. "noDuplicateObjectKeys": "error",
  59. "noDuplicateParameters": "error",
  60. "noDuplicateCase": "error",
  61. "noFallthroughSwitchClause": "error",
  62. "noRedeclare": "error",
  63. "noSparseArray": "error",
  64. "noUnsafeDeclarationMerging": "error",
  65. "noUnsafeNegation": "error",
  66. "useIsArray": "error",
  67. "noApproximativeNumericConstant": "error",
  68. "noMisrefactoredShorthandAssign": "error",
  69. "useAwait": "error",
  70. "useNamespaceKeyword": "error",
  71. "noSkippedTests": "error",
  72. "noFocusedTests": "error",
  73. "noDuplicateTestHooks": "error"
  74. },
  75. "style": {
  76. "noCommaOperator": "error",
  77. "noShoutyConstants": "error",
  78. "noParameterProperties": "error",
  79. "noVar": "error",
  80. "useConst": "error",
  81. "useShorthandFunctionType": "error",
  82. "useExportType": "error",
  83. "useImportType": "error",
  84. "useNodejsImportProtocol": "error",
  85. "useLiteralEnumMembers": "error",
  86. "useEnumInitializers": "error",
  87. "useAsConstAssertion": "error",
  88. "useBlockStatements": "error"
  89. }
  90. }
  91. },
  92. "files": {
  93. "ignoreUnknown": true,
  94. "ignore": [
  95. "**/*/trace.json",
  96. "static/app/data/world.json",
  97. "**/*.sourcemap.js",
  98. "**/*.min.js",
  99. "fixtures",
  100. ".devenv"
  101. ]
  102. },
  103. "css": {
  104. "formatter": {
  105. "enabled": false
  106. },
  107. "linter": {
  108. "enabled": false
  109. }
  110. },
  111. "formatter": {
  112. "enabled": true,
  113. "formatWithErrors": true,
  114. "indentStyle": "space",
  115. "indentWidth": 2,
  116. "lineEnding": "lf",
  117. "ignore": ["tests/**/*.json"]
  118. },
  119. "javascript": {
  120. "formatter": {
  121. "enabled": false,
  122. "lineWidth": 90,
  123. "quoteStyle": "single",
  124. "jsxQuoteStyle": "double",
  125. "quoteProperties": "asNeeded",
  126. "trailingCommas": "es5",
  127. "semicolons": "always",
  128. "arrowParentheses": "asNeeded",
  129. "bracketSpacing": false,
  130. "bracketSameLine": false
  131. }
  132. },
  133. "json": {
  134. "formatter": {
  135. "enabled": true
  136. },
  137. "parser": {
  138. "allowComments": true,
  139. "allowTrailingCommas": true
  140. }
  141. },
  142. "overrides": [
  143. {
  144. "include": [
  145. "api-docs/*.ts",
  146. "build-utils/*.ts",
  147. "config/*.ts",
  148. "scripts",
  149. "tests/js/sentry-test/loadFixtures.ts",
  150. "tests/js/jest-pegjs-transform.js",
  151. "tests/js/setup.ts",
  152. "tests/js/test-balancer/index.js",
  153. "*.config.ts"
  154. ],
  155. "linter": {
  156. "rules": {
  157. "correctness": {
  158. "noNodejsModules": "off"
  159. }
  160. }
  161. }
  162. },
  163. {
  164. "include": ["src/sentry/templates/sentry/error-page-embed.js"],
  165. "linter": {
  166. "rules": {
  167. "style": {
  168. "noVar": "off"
  169. }
  170. }
  171. }
  172. },
  173. {
  174. "include": [
  175. "static/app/utils/replays/types.tsx",
  176. "static/app/utils/queryClient.tsx",
  177. "static/app/views/performance/traceDetails/styles.tsx",
  178. "static/app/icons/index.tsx",
  179. "static/app/components/tabs/index.tsx",
  180. "static/app/components/sparklines/line.tsx",
  181. "static/app/types/index.tsx",
  182. "tests/js/sentry-test/reactTestingLibrary.tsx",
  183. "tests/js/sentry-test/index.tsx"
  184. ],
  185. "linter": {
  186. "rules": {
  187. "performance": {
  188. "noBarrelFile": "off"
  189. }
  190. }
  191. }
  192. }
  193. ]
  194. }