.eslintrc.json 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109
  1. {
  2. "root": true,
  3. "parser": "@typescript-eslint/parser",
  4. "parserOptions": {
  5. "ecmaVersion": 6,
  6. "sourceType": "module"
  7. },
  8. "plugins": [
  9. "@typescript-eslint",
  10. "jsdoc",
  11. "header",
  12. "local"
  13. ],
  14. "rules": {
  15. "constructor-super": "warn",
  16. "curly": "warn",
  17. "eqeqeq": "warn",
  18. "prefer-const": [
  19. "warn",
  20. {
  21. "destructuring": "all"
  22. }
  23. ],
  24. "no-buffer-constructor": "warn",
  25. "no-caller": "warn",
  26. "no-case-declarations": "warn",
  27. "no-debugger": "warn",
  28. "no-duplicate-case": "warn",
  29. "no-duplicate-imports": "warn",
  30. "no-eval": "warn",
  31. "no-async-promise-executor": "warn",
  32. "no-extra-semi": "warn",
  33. "no-new-wrappers": "warn",
  34. "no-redeclare": "off",
  35. "no-sparse-arrays": "warn",
  36. "no-throw-literal": "warn",
  37. "no-unsafe-finally": "warn",
  38. "no-unused-labels": "warn",
  39. "no-restricted-globals": [
  40. "warn",
  41. "name",
  42. "length",
  43. "event",
  44. "closed",
  45. "external",
  46. "status",
  47. "origin",
  48. "orientation",
  49. "context"
  50. ], // non-complete list of globals that are easy to access unintentionally
  51. "no-var": "warn",
  52. "jsdoc/no-types": "warn",
  53. "semi": "off",
  54. "@typescript-eslint/semi": "warn",
  55. "@typescript-eslint/member-delimiter-style": "warn",
  56. "@typescript-eslint/naming-convention": [
  57. "warn",
  58. {
  59. "selector": "class",
  60. "format": [
  61. "PascalCase"
  62. ]
  63. }
  64. ],
  65. "local/code-no-unused-expressions": [
  66. "warn",
  67. {
  68. "allowTernary": true
  69. }
  70. ],
  71. "local/code-translation-remind": "warn",
  72. "local/code-no-native-private": "warn",
  73. "local/code-parameter-properties-must-have-explicit-accessibility": "warn",
  74. "local/code-no-nls-in-standalone-editor": "warn",
  75. "local/code-no-potentially-unsafe-disposables": "warn",
  76. "local/code-no-dangerous-type-assertions": "off",
  77. "local/code-no-standalone-editor": "warn",
  78. "local/code-no-unexternalized-strings": "warn",
  79. "local/code-must-use-super-dispose": "warn",
  80. "local/code-declare-service-brand": "warn",
  81. "local/code-layering": [
  82. "warn",
  83. {
  84. "common": [],
  85. "node": [
  86. "common"
  87. ],
  88. "browser": [
  89. "common"
  90. ],
  91. "electron-sandbox": [
  92. "common",
  93. "browser"
  94. ],
  95. "electron-main": [
  96. "common",
  97. "node"
  98. ]
  99. }
  100. ],
  101. "header/header": [
  102. 2,
  103. "block",
  104. [
  105. "---------------------------------------------------------------------------------------------",
  106. " * Copyright (c) Microsoft Corporation. All rights reserved.",
  107. " * Licensed under the MIT License. See License.txt in the project root for license information.",
  108. " *--------------------------------------------------------------------------------------------"
  109. ]
  110. ]
  111. },
  112. "overrides": [
  113. {
  114. "files": [
  115. "*.js"
  116. ],
  117. "rules": {
  118. "jsdoc/no-types": "off"
  119. }
  120. },
  121. {
  122. "files": [
  123. "**/*.test.ts"
  124. ],
  125. "rules": {
  126. "local/code-must-use-super-dispose": "off",
  127. "local/code-no-test-only": "error",
  128. "local/code-no-test-async-suite": "warn",
  129. "local/code-no-unexternalized-strings": "off",
  130. "local/code-must-use-result": [
  131. "warn",
  132. [
  133. {
  134. "message": "Expression must be awaited",
  135. "functions": [
  136. "assertSnapshot",
  137. "assertHeap"
  138. ]
  139. }
  140. ]
  141. ]
  142. }
  143. },
  144. {
  145. "files": [
  146. "src/vs/**/*.test.ts"
  147. ],
  148. "rules": {
  149. "local/code-ensure-no-disposables-leak-in-test": [
  150. "warn",
  151. {
  152. // Files should (only) be removed from the list they adopt the leak detector
  153. "exclude": [
  154. "src/vs/base/test/browser/browser.test.ts",
  155. "src/vs/base/test/browser/ui/scrollbar/scrollableElement.test.ts",
  156. "src/vs/base/test/browser/ui/scrollbar/scrollbarState.test.ts",
  157. "src/vs/editor/contrib/codeAction/test/browser/codeActionModel.test.ts",
  158. "src/vs/editor/test/common/services/languageService.test.ts",
  159. "src/vs/editor/test/node/classification/typescript.test.ts",
  160. "src/vs/platform/configuration/test/common/configuration.test.ts",
  161. "src/vs/platform/extensions/test/common/extensionValidator.test.ts",
  162. "src/vs/platform/opener/test/common/opener.test.ts",
  163. "src/vs/platform/registry/test/common/platform.test.ts",
  164. "src/vs/platform/remote/test/common/remoteHosts.test.ts",
  165. "src/vs/platform/workspace/test/common/workspace.test.ts",
  166. "src/vs/platform/workspaces/test/electron-main/workspaces.test.ts",
  167. "src/vs/workbench/api/test/browser/mainThreadConfiguration.test.ts",
  168. "src/vs/workbench/api/test/common/extHostExtensionActivator.test.ts",
  169. "src/vs/workbench/api/test/node/extHostTunnelService.test.ts",
  170. "src/vs/workbench/contrib/bulkEdit/test/browser/bulkCellEdits.test.ts",
  171. "src/vs/workbench/contrib/chat/test/common/chatWordCounter.test.ts",
  172. "src/vs/workbench/contrib/editSessions/test/browser/editSessions.test.ts",
  173. "src/vs/workbench/contrib/extensions/test/common/extensionQuery.test.ts",
  174. "src/vs/workbench/contrib/notebook/test/browser/notebookExecutionService.test.ts",
  175. "src/vs/workbench/contrib/notebook/test/browser/notebookExecutionStateService.test.ts",
  176. "src/vs/workbench/contrib/tasks/test/common/problemMatcher.test.ts",
  177. "src/vs/workbench/contrib/tasks/test/common/taskConfiguration.test.ts",
  178. "src/vs/workbench/services/commands/test/common/commandService.test.ts",
  179. "src/vs/workbench/services/extensions/test/common/extensionDescriptionRegistry.test.ts",
  180. "src/vs/workbench/services/userActivity/test/browser/domActivityTracker.test.ts",
  181. "src/vs/workbench/test/browser/quickAccess.test.ts"
  182. ]
  183. }
  184. ]
  185. }
  186. },
  187. {
  188. "files": [
  189. "**/vscode.d.ts",
  190. "**/vscode.proposed.*.d.ts"
  191. ],
  192. "rules": {
  193. "local/vscode-dts-create-func": "warn",
  194. "local/vscode-dts-literal-or-types": "warn",
  195. "local/vscode-dts-string-type-literals": "warn",
  196. "local/vscode-dts-interface-naming": "warn",
  197. "local/vscode-dts-cancellation": "warn",
  198. "local/vscode-dts-use-thenable": "warn",
  199. "local/vscode-dts-region-comments": "warn",
  200. "local/vscode-dts-vscode-in-comments": "warn",
  201. "local/vscode-dts-provider-naming": [
  202. "warn",
  203. {
  204. "allowed": [
  205. "FileSystemProvider",
  206. "TreeDataProvider",
  207. "TestProvider",
  208. "CustomEditorProvider",
  209. "CustomReadonlyEditorProvider",
  210. "TerminalLinkProvider",
  211. "AuthenticationProvider",
  212. "NotebookContentProvider"
  213. ]
  214. }
  215. ],
  216. "local/vscode-dts-event-naming": [
  217. "warn",
  218. {
  219. "allowed": [
  220. "onCancellationRequested",
  221. "event"
  222. ],
  223. "verbs": [
  224. "accept",
  225. "change",
  226. "close",
  227. "collapse",
  228. "create",
  229. "delete",
  230. "discover",
  231. "dispose",
  232. "drop",
  233. "edit",
  234. "end",
  235. "execute",
  236. "expand",
  237. "grant",
  238. "hide",
  239. "invalidate",
  240. "open",
  241. "override",
  242. "perform",
  243. "receive",
  244. "register",
  245. "remove",
  246. "rename",
  247. "save",
  248. "send",
  249. "start",
  250. "terminate",
  251. "trigger",
  252. "unregister",
  253. "write"
  254. ]
  255. }
  256. ]
  257. }
  258. },
  259. {
  260. "files": [
  261. "**/vscode.d.ts"
  262. ],
  263. "rules": {
  264. "jsdoc/tag-lines": "off",
  265. "jsdoc/valid-types": "off",
  266. "jsdoc/no-multi-asterisks": [
  267. "warn",
  268. {
  269. "allowWhitespace": true
  270. }
  271. ],
  272. "jsdoc/require-jsdoc": [
  273. "warn",
  274. {
  275. "enableFixer": false,
  276. "contexts": [
  277. "TSInterfaceDeclaration",
  278. "TSPropertySignature",
  279. "TSMethodSignature",
  280. "TSDeclareFunction",
  281. "ClassDeclaration",
  282. "MethodDefinition",
  283. "PropertyDeclaration",
  284. "TSEnumDeclaration",
  285. "TSEnumMember",
  286. "ExportNamedDeclaration"
  287. ]
  288. }
  289. ],
  290. "jsdoc/check-param-names": [
  291. "warn",
  292. {
  293. "enableFixer": false,
  294. "checkDestructured": false
  295. }
  296. ],
  297. "jsdoc/require-returns": "warn"
  298. }
  299. },
  300. {
  301. "files": [
  302. "src/**/{common,browser}/**/*.ts"
  303. ],
  304. "rules": {
  305. "local/code-amd-node-module": "warn"
  306. }
  307. },
  308. {
  309. "files": [
  310. "src/**/{browser,electron-sandbox}/**/*.ts"
  311. ],
  312. "rules": {
  313. "local/code-no-global-document-listener": "warn",
  314. "no-restricted-syntax": [
  315. "warn",
  316. {
  317. "selector": "BinaryExpression[operator='instanceof'][right.name='MouseEvent']",
  318. "message": "Use DOM.isMouseEvent() to support multi-window scenarios."
  319. },
  320. {
  321. "selector": "BinaryExpression[operator='instanceof'][right.name='KeyboardEvent']",
  322. "message": "Use DOM.isKeyboardEvent() to support multi-window scenarios."
  323. },
  324. {
  325. "selector": "BinaryExpression[operator='instanceof'][right.name='PointerEvent']",
  326. "message": "Use DOM.isPointerEvent() to support multi-window scenarios."
  327. },
  328. {
  329. "selector": "BinaryExpression[operator='instanceof'][right.name='DragEvent']",
  330. "message": "Use DOM.isDragEvent() to support multi-window scenarios."
  331. },
  332. {
  333. "selector": "MemberExpression[object.name='document'][property.name='activeElement']",
  334. "message": "Use <targetWindow>.document.activeElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  335. },
  336. {
  337. "selector": "MemberExpression[object.name='document'][property.name='contains']",
  338. "message": "Use <targetWindow>.document.contains to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  339. },
  340. {
  341. "selector": "MemberExpression[object.name='document'][property.name='styleSheets']",
  342. "message": "Use <targetWindow>.document.styleSheets to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  343. },
  344. {
  345. "selector": "MemberExpression[object.name='document'][property.name='fullscreenElement']",
  346. "message": "Use <targetWindow>.document.fullscreenElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  347. },
  348. {
  349. "selector": "MemberExpression[object.name='document'][property.name='body']",
  350. "message": "Use <targetWindow>.document.body to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  351. },
  352. {
  353. "selector": "MemberExpression[object.name='document'][property.name='addEventListener']",
  354. "message": "Use <targetWindow>.document.addEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  355. },
  356. {
  357. "selector": "MemberExpression[object.name='document'][property.name='removeEventListener']",
  358. "message": "Use <targetWindow>.document.removeEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  359. },
  360. {
  361. "selector": "MemberExpression[object.name='document'][property.name='hasFocus']",
  362. "message": "Use <targetWindow>.document.hasFocus to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  363. },
  364. {
  365. "selector": "MemberExpression[object.name='document'][property.name='head']",
  366. "message": "Use <targetWindow>.document.head to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  367. },
  368. {
  369. "selector": "MemberExpression[object.name='document'][property.name='exitFullscreen']",
  370. "message": "Use <targetWindow>.document.exitFullscreen to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  371. },
  372. {
  373. "selector": "MemberExpression[object.name='document'][property.name='getElementById']",
  374. "message": "Use <targetWindow>.document.getElementById to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  375. },
  376. {
  377. "selector": "MemberExpression[object.name='document'][property.name='getElementsByClassName']",
  378. "message": "Use <targetWindow>.document.getElementsByClassName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  379. },
  380. {
  381. "selector": "MemberExpression[object.name='document'][property.name='getElementsByName']",
  382. "message": "Use <targetWindow>.document.getElementsByName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  383. },
  384. {
  385. "selector": "MemberExpression[object.name='document'][property.name='getElementsByTagName']",
  386. "message": "Use <targetWindow>.document.getElementsByTagName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  387. },
  388. {
  389. "selector": "MemberExpression[object.name='document'][property.name='getElementsByTagNameNS']",
  390. "message": "Use <targetWindow>.document.getElementsByTagNameNS to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  391. },
  392. {
  393. "selector": "MemberExpression[object.name='document'][property.name='getSelection']",
  394. "message": "Use <targetWindow>.document.getSelection to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  395. },
  396. {
  397. "selector": "MemberExpression[object.name='document'][property.name='open']",
  398. "message": "Use <targetWindow>.document.open to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  399. },
  400. {
  401. "selector": "MemberExpression[object.name='document'][property.name='close']",
  402. "message": "Use <targetWindow>.document.close to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  403. },
  404. {
  405. "selector": "MemberExpression[object.name='document'][property.name='documentElement']",
  406. "message": "Use <targetWindow>.document.documentElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  407. },
  408. {
  409. "selector": "MemberExpression[object.name='document'][property.name='visibilityState']",
  410. "message": "Use <targetWindow>.document.visibilityState to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  411. },
  412. {
  413. "selector": "MemberExpression[object.name='document'][property.name='querySelector']",
  414. "message": "Use <targetWindow>.document.querySelector to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  415. },
  416. {
  417. "selector": "MemberExpression[object.name='document'][property.name='querySelectorAll']",
  418. "message": "Use <targetWindow>.document.querySelectorAll to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  419. },
  420. {
  421. "selector": "MemberExpression[object.name='document'][property.name='elementFromPoint']",
  422. "message": "Use <targetWindow>.document.elementFromPoint to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  423. },
  424. {
  425. "selector": "MemberExpression[object.name='document'][property.name='elementsFromPoint']",
  426. "message": "Use <targetWindow>.document.elementsFromPoint to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  427. },
  428. {
  429. "selector": "MemberExpression[object.name='document'][property.name='onkeydown']",
  430. "message": "Use <targetWindow>.document.onkeydown to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  431. },
  432. {
  433. "selector": "MemberExpression[object.name='document'][property.name='onkeyup']",
  434. "message": "Use <targetWindow>.document.onkeyup to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  435. },
  436. {
  437. "selector": "MemberExpression[object.name='document'][property.name='onmousedown']",
  438. "message": "Use <targetWindow>.document.onmousedown to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  439. },
  440. {
  441. "selector": "MemberExpression[object.name='document'][property.name='onmouseup']",
  442. "message": "Use <targetWindow>.document.onmouseup to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  443. },
  444. {
  445. "selector": "MemberExpression[object.name='document'][property.name='execCommand']",
  446. "message": "Use <targetWindow>.document.execCommand to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  447. }
  448. ],
  449. "no-restricted-globals": [
  450. "warn",
  451. "name",
  452. "length",
  453. "event",
  454. "closed",
  455. "external",
  456. "status",
  457. "origin",
  458. "orientation",
  459. "context",
  460. {
  461. "name": "setInterval",
  462. "message": "Use <targetWindow>.setInterval to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  463. },
  464. {
  465. "name": "clearInterval",
  466. "message": "Use <targetWindow>.clearInterval to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  467. },
  468. {
  469. "name": "requestAnimationFrame",
  470. "message": "Use <targetWindow>.requestAnimationFrame to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  471. },
  472. {
  473. "name": "cancelAnimationFrame",
  474. "message": "Use <targetWindow>.cancelAnimationFrame to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  475. },
  476. {
  477. "name": "requestIdleCallback",
  478. "message": "Use <targetWindow>.requestIdleCallback to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  479. },
  480. {
  481. "name": "cancelIdleCallback",
  482. "message": "Use <targetWindow>.cancelIdleCallback to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  483. },
  484. {
  485. "name": "window",
  486. "message": "Use <targetWindow> to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  487. },
  488. {
  489. "name": "addEventListener",
  490. "message": "Use <targetWindow>.addEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  491. },
  492. {
  493. "name": "removeEventListener",
  494. "message": "Use <targetWindow>.removeEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  495. },
  496. {
  497. "name": "getComputedStyle",
  498. "message": "Use <targetWindow>.getComputedStyle to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  499. },
  500. {
  501. "name": "focus",
  502. "message": "Use <targetWindow>.focus to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  503. },
  504. {
  505. "name": "blur",
  506. "message": "Use <targetWindow>.blur to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  507. },
  508. {
  509. "name": "close",
  510. "message": "Use <targetWindow>.close to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  511. },
  512. {
  513. "name": "dispatchEvent",
  514. "message": "Use <targetWindow>.dispatchEvent to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  515. },
  516. {
  517. "name": "getSelection",
  518. "message": "Use <targetWindow>.getSelection to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  519. },
  520. {
  521. "name": "matchMedia",
  522. "message": "Use <targetWindow>.matchMedia to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  523. },
  524. {
  525. "name": "open",
  526. "message": "Use <targetWindow>.open to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  527. },
  528. {
  529. "name": "parent",
  530. "message": "Use <targetWindow>.parent to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  531. },
  532. {
  533. "name": "postMessage",
  534. "message": "Use <targetWindow>.postMessage to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  535. },
  536. {
  537. "name": "devicePixelRatio",
  538. "message": "Use <targetWindow>.devicePixelRatio to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  539. },
  540. {
  541. "name": "frames",
  542. "message": "Use <targetWindow>.frames to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  543. },
  544. {
  545. "name": "frameElement",
  546. "message": "Use <targetWindow>.frameElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  547. },
  548. {
  549. "name": "innerHeight",
  550. "message": "Use <targetWindow>.innerHeight to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  551. },
  552. {
  553. "name": "innerWidth",
  554. "message": "Use <targetWindow>.innerWidth to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  555. },
  556. {
  557. "name": "outerHeight",
  558. "message": "Use <targetWindow>.outerHeight to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  559. },
  560. {
  561. "name": "outerWidth",
  562. "message": "Use <targetWindow>.outerWidth to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  563. },
  564. {
  565. "name": "opener",
  566. "message": "Use <targetWindow>.opener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  567. },
  568. {
  569. "name": "origin",
  570. "message": "Use <targetWindow>.origin to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  571. },
  572. {
  573. "name": "screen",
  574. "message": "Use <targetWindow>.screen to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  575. },
  576. {
  577. "name": "screenLeft",
  578. "message": "Use <targetWindow>.screenLeft to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  579. },
  580. {
  581. "name": "screenTop",
  582. "message": "Use <targetWindow>.screenTop to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  583. },
  584. {
  585. "name": "screenX",
  586. "message": "Use <targetWindow>.screenX to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  587. },
  588. {
  589. "name": "screenY",
  590. "message": "Use <targetWindow>.screenY to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  591. },
  592. {
  593. "name": "scrollX",
  594. "message": "Use <targetWindow>.scrollX to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  595. },
  596. {
  597. "name": "scrollY",
  598. "message": "Use <targetWindow>.scrollY to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  599. },
  600. {
  601. "name": "top",
  602. "message": "Use <targetWindow>.top to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  603. },
  604. {
  605. "name": "visualViewport",
  606. "message": "Use <targetWindow>.visualViewport to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant."
  607. }
  608. ]
  609. }
  610. },
  611. {
  612. "files": [
  613. "src/**/*.ts"
  614. ],
  615. "rules": {
  616. "local/code-no-look-behind-regex": "warn",
  617. "local/code-import-patterns": [
  618. "warn",
  619. {
  620. // imports that are allowed in all files of layers:
  621. // - browser
  622. // - electron-sandbox
  623. "when": "hasBrowser",
  624. "allow": [
  625. "vs/css!./**/*"
  626. ]
  627. },
  628. {
  629. // imports that are allowed in all files of layers:
  630. // - node
  631. // - electron-main
  632. "when": "hasNode",
  633. "allow": [
  634. "@parcel/watcher",
  635. "@vscode/sqlite3",
  636. "@vscode/vscode-languagedetection",
  637. "@vscode/ripgrep",
  638. "@vscode/iconv-lite-umd",
  639. "@vscode/policy-watcher",
  640. "@vscode/proxy-agent",
  641. "@vscode/spdlog",
  642. "@vscode/windows-process-tree",
  643. "assert",
  644. "child_process",
  645. "console",
  646. "cookie",
  647. "crypto",
  648. "dns",
  649. "electron",
  650. "events",
  651. "fs",
  652. "fs/promises",
  653. "graceful-fs",
  654. "http",
  655. "https",
  656. "minimist",
  657. "native-keymap",
  658. "native-watchdog",
  659. "net",
  660. "node-pty",
  661. "os",
  662. "path",
  663. "perf_hooks",
  664. "readline",
  665. "stream",
  666. "string_decoder",
  667. "tas-client-umd",
  668. "tls",
  669. "url",
  670. "util",
  671. "v8-inspect-profiler",
  672. "vscode-regexpp",
  673. "vscode-textmate",
  674. "worker_threads",
  675. "@xterm/addon-image",
  676. "@xterm/addon-search",
  677. "@xterm/addon-serialize",
  678. "@xterm/addon-unicode11",
  679. "@xterm/addon-webgl",
  680. "@xterm/headless",
  681. "@xterm/xterm",
  682. "yauzl",
  683. "yazl",
  684. "zlib"
  685. ]
  686. },
  687. {
  688. // imports that are allowed in all /test/ files
  689. "when": "test",
  690. "allow": [
  691. "vs/css.build",
  692. "assert",
  693. "sinon",
  694. "sinon-test"
  695. ]
  696. },
  697. // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  698. // !!! Do not relax these rules !!!
  699. // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  700. //
  701. // A path ending in /~ has a special meaning. It indicates a template position
  702. // which will be substituted with one or more layers.
  703. //
  704. // When /~ is used in the target, the rule will be expanded to 14 distinct rules.
  705. // e.g. "src/vs/base/~" will be expanded to:
  706. // - src/vs/base/common
  707. // - src/vs/base/worker
  708. // - src/vs/base/browser
  709. // - src/vs/base/electron-sandbox
  710. // - src/vs/base/node
  711. // - src/vs/base/electron-main
  712. // - src/vs/base/test/common
  713. // - src/vs/base/test/worker
  714. // - src/vs/base/test/browser
  715. // - src/vs/base/test/electron-sandbox
  716. // - src/vs/base/test/node
  717. // - src/vs/base/test/electron-main
  718. //
  719. // When /~ is used in the restrictions, it will be replaced with the correct
  720. // layers that can be used e.g. "src/vs/base/electron-sandbox" will be able
  721. // to import "{common,browser,electron-sanbox}", etc.
  722. //
  723. // It is possible to use /~ in the restrictions property even without using it in
  724. // the target property by adding a layer property.
  725. {
  726. "target": "src/vs/base/~",
  727. "restrictions": [
  728. "vs/base/~"
  729. ]
  730. },
  731. {
  732. "target": "src/vs/base/parts/*/~",
  733. "restrictions": [
  734. "vs/base/~",
  735. "vs/base/parts/*/~"
  736. ]
  737. },
  738. {
  739. "target": "src/vs/platform/*/~",
  740. "restrictions": [
  741. "vs/base/~",
  742. "vs/base/parts/*/~",
  743. "vs/platform/*/~",
  744. "tas-client-umd", // node module allowed even in /common/
  745. "@microsoft/1ds-core-js", // node module allowed even in /common/
  746. "@microsoft/1ds-post-js" // node module allowed even in /common/
  747. ]
  748. },
  749. {
  750. "target": "src/vs/editor/~",
  751. "restrictions": [
  752. "vs/base/~",
  753. "vs/base/parts/*/~",
  754. "vs/platform/*/~",
  755. "vs/editor/~"
  756. ]
  757. },
  758. {
  759. "target": "src/vs/editor/contrib/*/~",
  760. "restrictions": [
  761. "vs/base/~",
  762. "vs/base/parts/*/~",
  763. "vs/platform/*/~",
  764. "vs/editor/~",
  765. "vs/editor/contrib/*/~"
  766. ]
  767. },
  768. {
  769. "target": "src/vs/editor/standalone/~",
  770. "restrictions": [
  771. "vs/base/~",
  772. "vs/base/parts/*/~",
  773. "vs/platform/*/~",
  774. "vs/editor/~",
  775. "vs/editor/contrib/*/~",
  776. "vs/editor/standalone/~"
  777. ]
  778. },
  779. {
  780. "target": "src/vs/editor/editor.all.ts",
  781. "layer": "browser",
  782. "restrictions": [
  783. "vs/base/~",
  784. "vs/base/parts/*/~",
  785. "vs/platform/*/~",
  786. "vs/editor/~",
  787. "vs/editor/contrib/*/~"
  788. ]
  789. },
  790. {
  791. "target": "src/vs/editor/editor.worker.ts",
  792. "layer": "worker",
  793. "restrictions": [
  794. "vs/base/~",
  795. "vs/base/parts/*/~",
  796. "vs/platform/*/~",
  797. "vs/editor/~"
  798. ]
  799. },
  800. {
  801. "target": "src/vs/editor/{editor.api.ts,editor.main.ts}",
  802. "layer": "browser",
  803. "restrictions": [
  804. "vs/base/~",
  805. "vs/base/parts/*/~",
  806. "vs/editor/~",
  807. "vs/editor/contrib/*/~",
  808. "vs/editor/standalone/~",
  809. "vs/editor/*"
  810. ]
  811. },
  812. {
  813. "target": "src/vs/workbench/~",
  814. "restrictions": [
  815. "vs/base/~",
  816. "vs/base/parts/*/~",
  817. "vs/platform/*/~",
  818. "vs/editor/~",
  819. "vs/editor/contrib/*/~",
  820. "vs/workbench/~",
  821. "vs/workbench/services/*/~",
  822. "assert",
  823. {
  824. "when": "test",
  825. "pattern": "vs/workbench/contrib/*/~"
  826. } // TODO@layers
  827. ]
  828. },
  829. {
  830. "target": "src/vs/workbench/api/~",
  831. "restrictions": [
  832. "vscode",
  833. "vs/base/~",
  834. "vs/base/parts/*/~",
  835. "vs/platform/*/~",
  836. "vs/editor/~",
  837. "vs/editor/contrib/*/~",
  838. "vs/workbench/api/~",
  839. "vs/workbench/~",
  840. "vs/workbench/services/*/~",
  841. "vs/workbench/contrib/*/~",
  842. "vs/workbench/contrib/terminalContrib/*/~"
  843. ]
  844. },
  845. {
  846. "target": "src/vs/workbench/services/*/~",
  847. "restrictions": [
  848. "vs/base/~",
  849. "vs/base/parts/*/~",
  850. "vs/platform/*/~",
  851. "vs/editor/~",
  852. "vs/editor/contrib/*/~",
  853. "vs/workbench/~",
  854. "vs/workbench/services/*/~",
  855. {
  856. "when": "test",
  857. "pattern": "vs/workbench/contrib/*/~"
  858. }, // TODO@layers
  859. "tas-client-umd", // node module allowed even in /common/
  860. "vscode-textmate", // node module allowed even in /common/
  861. "@vscode/vscode-languagedetection", // node module allowed even in /common/
  862. {
  863. "when": "hasBrowser",
  864. "pattern": "@xterm/xterm"
  865. } // node module allowed even in /browser/
  866. ]
  867. },
  868. {
  869. "target": "src/vs/workbench/contrib/*/~",
  870. "restrictions": [
  871. "vs/base/~",
  872. "vs/base/parts/*/~",
  873. "vs/platform/*/~",
  874. "vs/editor/~",
  875. "vs/editor/contrib/*/~",
  876. "vs/workbench/~",
  877. "vs/workbench/services/*/~",
  878. "vs/workbench/contrib/*/~",
  879. "vscode-notebook-renderer", // Type only import
  880. {
  881. "when": "hasBrowser",
  882. "pattern": "@xterm/xterm"
  883. }, // node module allowed even in /browser/
  884. {
  885. "when": "hasBrowser",
  886. "pattern": "@xterm/addon-*"
  887. }, // node module allowed even in /browser/
  888. {
  889. "when": "hasBrowser",
  890. "pattern": "vscode-textmate"
  891. } // node module allowed even in /browser/
  892. ]
  893. },
  894. {
  895. "target": "src/vs/workbench/contrib/terminalContrib/*/~",
  896. "restrictions": [
  897. "vs/base/~",
  898. "vs/base/parts/*/~",
  899. "vs/platform/*/~",
  900. "vs/editor/~",
  901. "vs/editor/contrib/*/~",
  902. "vs/workbench/~",
  903. "vs/workbench/services/*/~",
  904. "vs/workbench/contrib/*/~",
  905. // Only allow terminalContrib to import from itself, this works because
  906. // terminalContrib is one extra folder deep
  907. "vs/workbench/contrib/terminalContrib/*/~",
  908. "vscode-notebook-renderer", // Type only import
  909. {
  910. "when": "hasBrowser",
  911. "pattern": "@xterm/xterm"
  912. }, // node module allowed even in /browser/
  913. {
  914. "when": "hasBrowser",
  915. "pattern": "@xterm/addon-*"
  916. }, // node module allowed even in /browser/
  917. {
  918. "when": "hasBrowser",
  919. "pattern": "vscode-textmate"
  920. } // node module allowed even in /browser/
  921. ]
  922. },
  923. {
  924. "target": "src/vs/code/~",
  925. "restrictions": [
  926. "vs/base/~",
  927. "vs/base/parts/*/~",
  928. "vs/platform/*/~",
  929. "vs/editor/~",
  930. "vs/editor/contrib/*/~",
  931. "vs/code/~",
  932. {
  933. "when": "hasBrowser",
  934. "pattern": "vs/workbench/workbench.web.main"
  935. },
  936. {
  937. "when": "hasBrowser",
  938. "pattern": "vs/workbench/~"
  939. },
  940. {
  941. "when": "hasBrowser",
  942. "pattern": "vs/workbench/services/*/~"
  943. }
  944. ]
  945. },
  946. {
  947. "target": "src/vs/server/~",
  948. "restrictions": [
  949. "vs/base/~",
  950. "vs/base/parts/*/~",
  951. "vs/platform/*/~",
  952. "vs/workbench/~",
  953. "vs/workbench/api/~",
  954. "vs/workbench/services/*/~",
  955. "vs/workbench/contrib/*/~",
  956. "vs/server/~"
  957. ]
  958. },
  959. {
  960. "target": "src/vs/workbench/contrib/terminal/terminal.all.ts",
  961. "layer": "browser",
  962. "restrictions": [
  963. "vs/workbench/contrib/**"
  964. ]
  965. },
  966. {
  967. "target": "src/vs/workbench/workbench.common.main.ts",
  968. "layer": "browser",
  969. "restrictions": [
  970. "vs/base/~",
  971. "vs/base/parts/*/~",
  972. "vs/platform/*/~",
  973. "vs/editor/~",
  974. "vs/editor/contrib/*/~",
  975. "vs/editor/editor.all",
  976. "vs/workbench/~",
  977. "vs/workbench/api/~",
  978. "vs/workbench/services/*/~",
  979. "vs/workbench/contrib/*/~",
  980. "vs/workbench/contrib/terminal/terminal.all"
  981. ]
  982. },
  983. {
  984. "target": "src/vs/workbench/workbench.web.main.ts",
  985. "layer": "browser",
  986. "restrictions": [
  987. "vs/base/~",
  988. "vs/base/parts/*/~",
  989. "vs/platform/*/~",
  990. "vs/editor/~",
  991. "vs/editor/contrib/*/~",
  992. "vs/editor/editor.all",
  993. "vs/workbench/~",
  994. "vs/workbench/api/~",
  995. "vs/workbench/services/*/~",
  996. "vs/workbench/contrib/*/~",
  997. "vs/workbench/workbench.common.main"
  998. ]
  999. },
  1000. {
  1001. "target": "src/vs/workbench/workbench.desktop.main.ts",
  1002. "layer": "electron-sandbox",
  1003. "restrictions": [
  1004. "vs/base/*/~",
  1005. "vs/base/parts/*/~",
  1006. "vs/platform/*/~",
  1007. "vs/editor/~",
  1008. "vs/editor/contrib/*/~",
  1009. "vs/editor/editor.all",
  1010. "vs/workbench/~",
  1011. "vs/workbench/api/~",
  1012. "vs/workbench/services/*/~",
  1013. "vs/workbench/contrib/*/~",
  1014. "vs/workbench/workbench.common.main"
  1015. ]
  1016. },
  1017. {
  1018. "target": "src/vs/amdX.ts",
  1019. "restrictions": [
  1020. "vs/base/common/*"
  1021. ]
  1022. },
  1023. {
  1024. "target": "src/vs/workbench/{workbench.desktop.main.nls.js,workbench.web.main.nls.js}",
  1025. "restrictions": []
  1026. },
  1027. {
  1028. "target": "src/vs/{loader.d.ts,css.ts,css.build.ts,monaco.d.ts,nls.ts,nls.build.ts,nls.mock.ts}",
  1029. "restrictions": []
  1030. },
  1031. {
  1032. "target": "src/vscode-dts/**",
  1033. "restrictions": []
  1034. },
  1035. {
  1036. "target": "src/{bootstrap-amd.js,bootstrap-fork.js,bootstrap-node.js,bootstrap-window.js,bootstrap.js,cli.js,main.js,server-cli.js,server-main.js}",
  1037. "restrictions": []
  1038. }
  1039. ]
  1040. }
  1041. },
  1042. {
  1043. "files": [
  1044. "test/**/*.ts"
  1045. ],
  1046. "rules": {
  1047. "local/code-import-patterns": [
  1048. "warn",
  1049. {
  1050. "target": "test/smoke/**",
  1051. "restrictions": [
  1052. "test/automation",
  1053. "test/smoke/**",
  1054. "@vscode/*",
  1055. "@parcel/*",
  1056. "@playwright/*",
  1057. "*" // node modules
  1058. ]
  1059. },
  1060. {
  1061. "target": "test/automation/**",
  1062. "restrictions": [
  1063. "test/automation/**",
  1064. "@vscode/*",
  1065. "@parcel/*",
  1066. "playwright-core/**",
  1067. "@playwright/*",
  1068. "*" // node modules
  1069. ]
  1070. },
  1071. {
  1072. "target": "test/integration/**",
  1073. "restrictions": [
  1074. "test/integration/**",
  1075. "@vscode/*",
  1076. "@parcel/*",
  1077. "@playwright/*",
  1078. "*" // node modules
  1079. ]
  1080. },
  1081. {
  1082. "target": "test/monaco/**",
  1083. "restrictions": [
  1084. "test/monaco/**",
  1085. "@vscode/*",
  1086. "@parcel/*",
  1087. "@playwright/*",
  1088. "*" // node modules
  1089. ]
  1090. }
  1091. ]
  1092. }
  1093. },
  1094. {
  1095. "files": [
  1096. "src/vs/workbench/contrib/notebook/browser/view/renderers/*.ts"
  1097. ],
  1098. "rules": {
  1099. "local/code-no-runtime-import": [
  1100. "error",
  1101. {
  1102. "src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts": ["**/*"]
  1103. }
  1104. ]
  1105. }
  1106. }
  1107. ]
  1108. }