@enjoys/context-engine 1.3.1 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/data/codeActions/angular.json +126 -0
  2. package/data/codeActions/nestjs.json +124 -0
  3. package/data/codeActions/nextjs.json +198 -0
  4. package/data/codeActions/react.json +154 -0
  5. package/data/codeActions/shadcn.json +112 -0
  6. package/data/codeActions/shell.json +169 -26
  7. package/data/codeLens/angular.json +22 -0
  8. package/data/codeLens/nestjs.json +21 -0
  9. package/data/codeLens/nextjs.json +117 -0
  10. package/data/codeLens/react.json +89 -0
  11. package/data/codeLens/shadcn.json +89 -0
  12. package/data/codeLens/shell.json +59 -17
  13. package/data/codeLens/tailwindcss.json +56 -0
  14. package/data/color/angular.json +21 -0
  15. package/data/color/nestjs.json +18 -0
  16. package/data/color/nextjs.json +22 -0
  17. package/data/color/react.json +93 -0
  18. package/data/color/shadcn.json +66 -0
  19. package/data/color/shell.json +106 -80
  20. package/data/commands/angular.json +312 -0
  21. package/data/commands/manifest.json +5 -0
  22. package/data/commands/nestjs.json +273 -0
  23. package/data/commands/nextjs.json +123 -0
  24. package/data/commands/react.json +210 -0
  25. package/data/commands/shadcn.json +410 -0
  26. package/data/commands/shell.json +571 -41
  27. package/data/completion/angular.json +1490 -0
  28. package/data/completion/css.json +793 -0
  29. package/data/completion/nestjs.json +1454 -0
  30. package/data/completion/nextjs.json +1373 -0
  31. package/data/completion/react.json +1319 -0
  32. package/data/completion/shadcn.json +1202 -0
  33. package/data/completion/shell.json +2446 -510
  34. package/data/declaration/angular.json +46 -0
  35. package/data/declaration/nestjs.json +47 -0
  36. package/data/declaration/nextjs.json +274 -0
  37. package/data/declaration/react.json +199 -0
  38. package/data/declaration/shadcn.json +211 -0
  39. package/data/declaration/shell.json +343 -24
  40. package/data/declaration/tailwindcss.json +72 -0
  41. package/data/definition/angular.json +670 -0
  42. package/data/definition/nestjs.json +684 -0
  43. package/data/definition/nextjs.json +439 -0
  44. package/data/definition/react.json +397 -0
  45. package/data/definition/shadcn.json +99 -0
  46. package/data/definition/shell.json +820 -0
  47. package/data/documentHighlight/angular.json +414 -0
  48. package/data/documentHighlight/css.json +77 -2
  49. package/data/documentHighlight/nestjs.json +115 -0
  50. package/data/documentHighlight/nextjs.json +212 -0
  51. package/data/documentHighlight/react.json +119 -0
  52. package/data/documentHighlight/shadcn.json +168 -0
  53. package/data/documentHighlight/shell.json +664 -334
  54. package/data/documentHighlight/tailwindcss.json +105 -10
  55. package/data/documentRangeFormatting/angular.json +45 -0
  56. package/data/documentRangeFormatting/nestjs.json +17 -0
  57. package/data/documentRangeFormatting/nextjs.json +17 -0
  58. package/data/documentRangeFormatting/react.json +78 -0
  59. package/data/documentRangeFormatting/shadcn.json +45 -0
  60. package/data/documentRangeFormatting/shell.json +120 -53
  61. package/data/documentSymbol/angular.json +180 -0
  62. package/data/documentSymbol/nestjs.json +152 -0
  63. package/data/documentSymbol/nextjs.json +159 -0
  64. package/data/documentSymbol/react.json +145 -0
  65. package/data/documentSymbol/shadcn.json +131 -0
  66. package/data/documentSymbol/shell.json +166 -26
  67. package/data/documentSymbol/tailwindcss.json +49 -0
  68. package/data/foldingRange/angular.json +99 -0
  69. package/data/foldingRange/nestjs.json +26 -0
  70. package/data/foldingRange/nextjs.json +26 -0
  71. package/data/foldingRange/react.json +120 -0
  72. package/data/foldingRange/shadcn.json +93 -0
  73. package/data/foldingRange/shell.json +106 -46
  74. package/data/formatting/angular.json +21 -0
  75. package/data/formatting/nestjs.json +23 -0
  76. package/data/formatting/nextjs.json +23 -0
  77. package/data/formatting/react.json +71 -0
  78. package/data/formatting/shadcn.json +61 -0
  79. package/data/formatting/shell.json +103 -19
  80. package/data/hover/angular.json +455 -0
  81. package/data/hover/css.json +232 -0
  82. package/data/hover/nestjs.json +296 -0
  83. package/data/hover/nextjs.json +305 -0
  84. package/data/hover/react.json +173 -0
  85. package/data/hover/shadcn.json +450 -0
  86. package/data/hover/shell.json +684 -75
  87. package/data/implementation/angular.json +22 -0
  88. package/data/implementation/nestjs.json +24 -0
  89. package/data/implementation/nextjs.json +137 -0
  90. package/data/implementation/react.json +125 -0
  91. package/data/implementation/shadcn.json +89 -0
  92. package/data/implementation/shell.json +59 -3
  93. package/data/inlayHints/angular.json +24 -0
  94. package/data/inlayHints/nestjs.json +24 -0
  95. package/data/inlayHints/nextjs.json +143 -0
  96. package/data/inlayHints/react.json +177 -0
  97. package/data/inlayHints/shadcn.json +109 -0
  98. package/data/inlayHints/shell.json +223 -35
  99. package/data/inlineCompletions/angular.json +135 -0
  100. package/data/inlineCompletions/nestjs.json +25 -0
  101. package/data/inlineCompletions/nextjs.json +179 -0
  102. package/data/inlineCompletions/react.json +203 -0
  103. package/data/inlineCompletions/shadcn.json +115 -0
  104. package/data/inlineCompletions/shell.json +185 -35
  105. package/data/linkedEditingRange/angular.json +23 -0
  106. package/data/linkedEditingRange/nestjs.json +10 -0
  107. package/data/linkedEditingRange/nextjs.json +11 -0
  108. package/data/linkedEditingRange/react.json +75 -0
  109. package/data/linkedEditingRange/shadcn.json +23 -0
  110. package/data/linkedEditingRange/shell.json +25 -25
  111. package/data/links/angular.json +95 -0
  112. package/data/links/nestjs.json +130 -0
  113. package/data/links/nextjs.json +91 -0
  114. package/data/links/react.json +75 -0
  115. package/data/links/shadcn.json +98 -0
  116. package/data/links/shell.json +56 -0
  117. package/data/links/tailwindcss.json +25 -0
  118. package/data/manifest.json +339 -152
  119. package/data/onTypeFormatting/angular.json +14 -0
  120. package/data/onTypeFormatting/nestjs.json +16 -0
  121. package/data/onTypeFormatting/nextjs.json +17 -0
  122. package/data/onTypeFormatting/react.json +127 -0
  123. package/data/onTypeFormatting/shadcn.json +54 -0
  124. package/data/onTypeFormatting/shell.json +72 -68
  125. package/data/rangeSemanticTokens/angular.json +140 -0
  126. package/data/rangeSemanticTokens/nestjs.json +27 -0
  127. package/data/rangeSemanticTokens/nextjs.json +28 -0
  128. package/data/rangeSemanticTokens/react.json +216 -0
  129. package/data/rangeSemanticTokens/shadcn.json +140 -0
  130. package/data/rangeSemanticTokens/shell.json +247 -69
  131. package/data/rangeSemanticTokens/tailwindcss.json +99 -8
  132. package/data/references/angular.json +26 -0
  133. package/data/references/nestjs.json +24 -0
  134. package/data/references/nextjs.json +178 -0
  135. package/data/references/react.json +192 -0
  136. package/data/references/shadcn.json +101 -0
  137. package/data/references/shell.json +323 -92
  138. package/data/references/tailwindcss.json +66 -0
  139. package/data/rename/angular.json +131 -0
  140. package/data/rename/nestjs.json +32 -0
  141. package/data/rename/nextjs.json +31 -0
  142. package/data/rename/react.json +88 -0
  143. package/data/rename/shadcn.json +79 -0
  144. package/data/rename/shell.json +101 -31
  145. package/data/selectionRange/angular.json +95 -0
  146. package/data/selectionRange/nestjs.json +21 -0
  147. package/data/selectionRange/nextjs.json +22 -0
  148. package/data/selectionRange/react.json +87 -0
  149. package/data/selectionRange/shadcn.json +89 -0
  150. package/data/selectionRange/shell.json +65 -35
  151. package/data/semanticTokens/angular.json +198 -0
  152. package/data/semanticTokens/nestjs.json +35 -0
  153. package/data/semanticTokens/nextjs.json +38 -0
  154. package/data/semanticTokens/react.json +215 -0
  155. package/data/semanticTokens/shadcn.json +180 -0
  156. package/data/semanticTokens/shell.json +238 -65
  157. package/data/signatureHelp/angular.json +182 -0
  158. package/data/signatureHelp/nestjs.json +128 -0
  159. package/data/signatureHelp/nextjs.json +127 -0
  160. package/data/signatureHelp/react.json +281 -0
  161. package/data/signatureHelp/shadcn.json +237 -0
  162. package/data/signatureHelp/shell.json +797 -104
  163. package/data/typeDefinition/angular.json +362 -0
  164. package/data/typeDefinition/nestjs.json +334 -0
  165. package/data/typeDefinition/nextjs.json +285 -0
  166. package/data/typeDefinition/react.json +236 -0
  167. package/data/typeDefinition/shadcn.json +292 -0
  168. package/data/typeDefinition/shell.json +104 -40
  169. package/package.json +1 -1
  170. package/data/codeActions/bash.json +0 -169
  171. package/data/codeActions/zsh.json +0 -49
  172. package/data/codeLens/bash.json +0 -75
  173. package/data/codeLens/zsh.json +0 -19
  174. package/data/color/bash.json +0 -100
  175. package/data/color/zsh.json +0 -80
  176. package/data/commands/bash.json +0 -102
  177. package/data/commands/zsh.json +0 -166
  178. package/data/completion/bash.json +0 -1184
  179. package/data/completion/zsh.json +0 -973
  180. package/data/declaration/bash.json +0 -301
  181. package/data/declaration/zsh.json +0 -205
  182. package/data/definition/bash.json +0 -565
  183. package/data/definition/zsh.json +0 -350
  184. package/data/documentHighlight/bash.json +0 -393
  185. package/data/documentHighlight/zsh.json +0 -266
  186. package/data/documentRangeFormatting/bash.json +0 -41
  187. package/data/documentRangeFormatting/zsh.json +0 -59
  188. package/data/documentSymbol/bash.json +0 -124
  189. package/data/documentSymbol/zsh.json +0 -26
  190. package/data/foldingRange/bash.json +0 -76
  191. package/data/foldingRange/zsh.json +0 -46
  192. package/data/formatting/bash.json +0 -88
  193. package/data/formatting/zsh.json +0 -28
  194. package/data/hover/bash.json +0 -579
  195. package/data/hover/zsh.json +0 -96
  196. package/data/implementation/bash.json +0 -44
  197. package/data/implementation/zsh.json +0 -41
  198. package/data/inlayHints/bash.json +0 -207
  199. package/data/inlayHints/zsh.json +0 -43
  200. package/data/inlineCompletions/bash.json +0 -155
  201. package/data/inlineCompletions/zsh.json +0 -17
  202. package/data/linkedEditingRange/bash.json +0 -25
  203. package/data/linkedEditingRange/zsh.json +0 -25
  204. package/data/links/bash.json +0 -56
  205. package/data/links/zsh.json +0 -15
  206. package/data/onTypeFormatting/bash.json +0 -68
  207. package/data/onTypeFormatting/zsh.json +0 -68
  208. package/data/rangeSemanticTokens/bash.json +0 -90
  209. package/data/rangeSemanticTokens/zsh.json +0 -76
  210. package/data/references/bash.json +0 -221
  211. package/data/references/zsh.json +0 -166
  212. package/data/rename/bash.json +0 -37
  213. package/data/rename/zsh.json +0 -31
  214. package/data/selectionRange/bash.json +0 -35
  215. package/data/selectionRange/zsh.json +0 -35
  216. package/data/semanticTokens/bash.json +0 -71
  217. package/data/semanticTokens/zsh.json +0 -71
  218. package/data/signatureHelp/bash.json +0 -111
  219. package/data/signatureHelp/zsh.json +0 -118
  220. package/data/typeDefinition/bash.json +0 -95
  221. package/data/typeDefinition/zsh.json +0 -40
@@ -0,0 +1,93 @@
1
+ {
2
+ "language": "shadcn",
3
+ "foldingPatterns": [
4
+ {
5
+ "startPattern": "^import\\s",
6
+ "endPattern": "(?=^(?!import\\s|\\s*$))",
7
+ "kind": "imports",
8
+ "description": "Fold contiguous import statement blocks"
9
+ },
10
+ {
11
+ "startPattern": "React\\.forwardRef\\s*(?:<[^>]*>)?\\s*\\(",
12
+ "endPattern": "^\\)\\s*;?\\s*$",
13
+ "kind": "region",
14
+ "description": "Fold React.forwardRef component wrapper"
15
+ },
16
+ {
17
+ "startPattern": "\\bcva\\s*\\(",
18
+ "endPattern": "^\\s*\\)\\s*;?\\s*$",
19
+ "kind": "region",
20
+ "description": "Fold cva() class-variance-authority definition"
21
+ },
22
+ {
23
+ "startPattern": "return\\s*\\(?\\s*$",
24
+ "endPattern": "^\\s*\\)\\s*;?\\s*$",
25
+ "kind": "region",
26
+ "description": "Fold JSX return block in component"
27
+ },
28
+ {
29
+ "startPattern": "(?:function|const)\\s+[A-Z][a-zA-Z0-9]*\\s*(?:=|\\()",
30
+ "endPattern": "^\\}\\s*;?\\s*$",
31
+ "kind": "region",
32
+ "description": "Fold function or const component body"
33
+ },
34
+ {
35
+ "startPattern": "(?:interface|type)\\s+[A-Z][a-zA-Z0-9]*(?:<[^>]*>)?\\s*(?:=\\s*)?\\{",
36
+ "endPattern": "^\\}\\s*;?\\s*$",
37
+ "kind": "region",
38
+ "description": "Fold interface or type definition block"
39
+ },
40
+ {
41
+ "startPattern": "(?:const\\s+\\w+Schema|z\\.object)\\s*(?:=\\s*)?\\(?\\s*\\{",
42
+ "endPattern": "^\\s*\\}\\s*\\)?\\s*;?\\s*$",
43
+ "kind": "region",
44
+ "description": "Fold Zod form schema definition"
45
+ },
46
+ {
47
+ "startPattern": "(?:const\\s+)?columns\\s*(?::\\s*ColumnDef[^=]*)?=\\s*\\[",
48
+ "endPattern": "^\\s*\\]\\s*;?\\s*$",
49
+ "kind": "region",
50
+ "description": "Fold column definitions array for DataTable"
51
+ },
52
+ {
53
+ "startPattern": "\\b(?:describe|it|test)\\s*\\(",
54
+ "endPattern": "^\\s*\\}\\s*\\)\\s*;?\\s*$",
55
+ "kind": "region",
56
+ "description": "Fold describe/it/test blocks"
57
+ },
58
+ {
59
+ "startPattern": "\\bswitch\\s*\\(",
60
+ "endPattern": "^\\s*\\}",
61
+ "kind": "region",
62
+ "description": "Fold switch/case statement blocks"
63
+ },
64
+ {
65
+ "startPattern": "(?:const|let|var)\\s+\\w+\\s*(?::[^=]*)?=\\s*\\{",
66
+ "endPattern": "^\\s*\\}\\s*;?\\s*$",
67
+ "kind": "region",
68
+ "description": "Fold object literal assignments"
69
+ },
70
+ {
71
+ "startPattern": "`",
72
+ "endPattern": "`",
73
+ "kind": "region",
74
+ "description": "Fold multi-line template literal strings"
75
+ },
76
+ {
77
+ "startPattern": "(?:const|let|var)\\s+\\w+\\s*(?::[^=]*)?=\\s*\\[",
78
+ "endPattern": "^\\s*\\]\\s*;?\\s*$",
79
+ "kind": "region",
80
+ "description": "Fold array literal assignments"
81
+ },
82
+ {
83
+ "startPattern": "/\\*\\*?",
84
+ "endPattern": "\\*/",
85
+ "kind": "comment",
86
+ "description": "Fold multi-line comment blocks"
87
+ }
88
+ ],
89
+ "regionMarkers": {
90
+ "start": "// #region",
91
+ "end": "// #endregion"
92
+ }
93
+ }
@@ -1,46 +1,106 @@
1
- {
2
- "language": "shell",
3
- "offSide": false,
4
- "markers": {
5
- "start": "^\\s*#\\s*#region\\b",
6
- "end": "^\\s*#\\s*#endregion\\b"
7
- },
8
- "foldingRules": [
9
- {
10
- "kind": "region",
11
- "startPattern": "\\{\\s*$",
12
- "endPattern": "^\\s*\\}",
13
- "description": "Curly brace blocks"
14
- },
15
- {
16
- "kind": "region",
17
- "startPattern": "\\bfunction\\b.*\\{\\s*$",
18
- "endPattern": "^\\s*\\}",
19
- "description": "Function definitions"
20
- },
21
- {
22
- "kind": "region",
23
- "startPattern": "\\bif\\b",
24
- "endPattern": "\\bfi\\b",
25
- "description": "If/fi conditionals"
26
- },
27
- {
28
- "kind": "region",
29
- "startPattern": "\\bcase\\b",
30
- "endPattern": "\\besac\\b",
31
- "description": "Case/esac blocks"
32
- },
33
- {
34
- "kind": "region",
35
- "startPattern": "\\bfor\\b",
36
- "endPattern": "\\bdone\\b",
37
- "description": "For/done loops"
38
- },
39
- {
40
- "kind": "region",
41
- "startPattern": "\\bwhile\\b",
42
- "endPattern": "\\bdone\\b",
43
- "description": "While/done loops"
44
- }
45
- ]
46
- }
1
+ {
2
+ "language": "shell",
3
+ "offSide": false,
4
+ "markers": {
5
+ "start": "^\\s*#\\s*#region\\b",
6
+ "end": "^\\s*#\\s*#endregion\\b"
7
+ },
8
+ "foldingRules": [
9
+ {
10
+ "kind": "region",
11
+ "startPattern": "\\{\\s*$",
12
+ "endPattern": "^\\s*\\}",
13
+ "description": "Curly brace blocks"
14
+ },
15
+ {
16
+ "kind": "region",
17
+ "startPattern": "\\bfunction\\b.*\\{\\s*$",
18
+ "endPattern": "^\\s*\\}",
19
+ "description": "Function definitions"
20
+ },
21
+ {
22
+ "kind": "region",
23
+ "startPattern": "\\bif\\b",
24
+ "endPattern": "\\bfi\\b",
25
+ "description": "If/fi conditionals"
26
+ },
27
+ {
28
+ "kind": "region",
29
+ "startPattern": "\\bcase\\b",
30
+ "endPattern": "\\besac\\b",
31
+ "description": "Case/esac blocks"
32
+ },
33
+ {
34
+ "kind": "region",
35
+ "startPattern": "\\bfor\\b",
36
+ "endPattern": "\\bdone\\b",
37
+ "description": "For/done loops"
38
+ },
39
+ {
40
+ "kind": "region",
41
+ "startPattern": "\\bwhile\\b",
42
+ "endPattern": "\\bdone\\b",
43
+ "description": "While/done loops"
44
+ },
45
+ {
46
+ "kind": "region",
47
+ "startPattern": "^\\s*(function\\s+\\w+|\\w+\\s*\\(\\s*\\))\\s*\\{?",
48
+ "endPattern": "^\\s*\\}",
49
+ "description": "Function definition block"
50
+ },
51
+ {
52
+ "kind": "region",
53
+ "startPattern": "^\\s*if\\b",
54
+ "endPattern": "^\\s*fi\\b",
55
+ "description": "If/fi conditional block"
56
+ },
57
+ {
58
+ "kind": "region",
59
+ "startPattern": "^\\s*case\\b",
60
+ "endPattern": "^\\s*esac\\b",
61
+ "description": "Case/esac switch block"
62
+ },
63
+ {
64
+ "kind": "region",
65
+ "startPattern": "^\\s*for\\b",
66
+ "endPattern": "^\\s*done\\b",
67
+ "description": "For/done loop block"
68
+ },
69
+ {
70
+ "kind": "region",
71
+ "startPattern": "^\\s*while\\b",
72
+ "endPattern": "^\\s*done\\b",
73
+ "description": "While/done loop block"
74
+ },
75
+ {
76
+ "kind": "region",
77
+ "startPattern": "^\\s*until\\b",
78
+ "endPattern": "^\\s*done\\b",
79
+ "description": "Until/done loop block"
80
+ },
81
+ {
82
+ "kind": "region",
83
+ "startPattern": "^\\s*do\\b",
84
+ "endPattern": "^\\s*done\\b",
85
+ "description": "Do/done block"
86
+ },
87
+ {
88
+ "kind": "region",
89
+ "startPattern": "^\\s*select\\b",
90
+ "endPattern": "^\\s*done\\b",
91
+ "description": "Select/done block"
92
+ },
93
+ {
94
+ "kind": "comment",
95
+ "startPattern": "^\\s*#(?!\\s*region\\b|\\s*endregion\\b)",
96
+ "endPattern": "^(?!\\s*#)",
97
+ "description": "Consecutive comment lines"
98
+ },
99
+ {
100
+ "kind": "region",
101
+ "startPattern": "<<-?\\s*['\"]?(\\w+)['\"]?",
102
+ "endPattern": "^\\s*\\1\\s*$",
103
+ "description": "Here-document block"
104
+ }
105
+ ]
106
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "language": "angular",
3
+ "formattingRules": [
4
+ { "context": "decorator_placement", "rule": "Place each decorator on its own line directly above the class, method, or property it decorates, with no blank line between decorator and target.", "description": "Decorators like @Component, @Injectable, @Input must appear on the line immediately preceding their target" },
5
+ { "context": "template_string_formatting", "rule": "Inline templates using backtick strings should be indented one level deeper than the decorator property, with the closing backtick aligned to the property key.", "description": "Ensures consistent indentation for inline component templates" },
6
+ { "context": "import_sorting", "rule": "Sort imports in the following order: 1) @angular/* packages, 2) third-party packages, 3) local/relative imports. Separate each group with a blank line.", "description": "Consistent import ordering for Angular files" },
7
+ { "context": "class_member_ordering", "rule": "Order class members as: 1) static properties, 2) decorated properties (@Input, @Output), 3) signal declarations, 4) public properties, 5) private properties, 6) constructor, 7) lifecycle hooks in execution order, 8) public methods, 9) private methods.", "description": "Standardized member ordering within Angular component and service classes" },
8
+ { "context": "lifecycle_hooks_order", "rule": "Order lifecycle hooks by their execution sequence: ngOnChanges, ngOnInit, ngDoCheck, ngAfterContentInit, ngAfterContentChecked, ngAfterViewInit, ngAfterViewChecked, ngOnDestroy.", "description": "Lifecycle hooks should follow Angular's invocation order" },
9
+ { "context": "signal_declarations", "rule": "Group signal declarations together: signal() first, then computed(), then effect(). Each should be on its own line with type annotations when the type is not obvious.", "description": "Consistent grouping and ordering of signal-based reactive primitives" },
10
+ { "context": "constructor_injection", "rule": "List constructor parameters one per line when there are more than two. Use access modifiers (private, protected, public, readonly) consistently. Prefer inject() function over constructor injection for standalone components.", "description": "Readable formatting for dependency injection parameters" },
11
+ { "context": "array_alignment", "rule": "When arrays in decorators (imports, declarations, providers, exports) exceed three items, place each item on its own line with a trailing comma.", "description": "Multi-item arrays in NgModule or Component metadata should be vertically aligned" },
12
+ { "context": "method_spacing", "rule": "Separate methods with exactly one blank line. Do not add blank lines between a method's decorators and the method signature.", "description": "Consistent spacing between class methods" },
13
+ { "context": "component_metadata", "rule": "Order @Component metadata properties as: selector, standalone, imports, templateUrl/template, styleUrls/styles, changeDetection, encapsulation, providers.", "description": "Consistent ordering of component decorator metadata properties" }
14
+ ],
15
+ "indentation": {
16
+ "useTabs": false,
17
+ "tabSize": 2,
18
+ "trimTrailingWhitespace": true,
19
+ "insertFinalNewline": true
20
+ }
21
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "language": "nestjs",
3
+ "formatting": {
4
+ "defaultTabSize": 2,
5
+ "defaultInsertSpaces": true,
6
+ "rules": [
7
+ { "description": "Remove trailing whitespace", "pattern": "\\s+$", "replacement": "" },
8
+ { "description": "Space after keywords", "pattern": "\\b(if|for|while|switch|catch|return)\\(", "replacement": "$1 (" },
9
+ { "description": "Space before opening brace", "pattern": "\\)\\{", "replacement": ") {" },
10
+ { "description": "Consistent arrow spacing", "pattern": "=>\\{", "replacement": "=> {" },
11
+ { "description": "Space after decorator parenthesis", "pattern": "@(\\w+)\\( ", "replacement": "@$1(" },
12
+ { "description": "Remove multiple blank lines", "pattern": "\\n{3,}", "replacement": "\\n\\n" },
13
+ { "description": "Semicolon enforcement", "pattern": "(?<![;{}*/])\\s*$", "replacement": ";" },
14
+ { "description": "Trailing comma in multiline objects", "pattern": "(\\S)\\n(\\s*[}\\]])", "replacement": "$1,\\n$2" },
15
+ { "description": "Normalize line endings", "pattern": "\\r\\n", "replacement": "\\n" },
16
+ { "description": "Consistent inject spacing", "pattern": "private\\s+readonly\\s+", "replacement": "private readonly " }
17
+ ],
18
+ "indentation": {
19
+ "increasePattern": "(?:\\{[^}]*$|\\([^)]*$|=>\\s*$|@Module\\(\\{|@Controller\\(|class\\s+\\w+[^{]*\\{)",
20
+ "decreasePattern": "^\\s*[}\\)\\]]|^\\s*\\)\\s*;?\\s*$"
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "language": "nextjs",
3
+ "formatting": {
4
+ "defaultTabSize": 2,
5
+ "defaultInsertSpaces": true,
6
+ "rules": [
7
+ { "description": "Remove trailing whitespace", "pattern": "\\s+$", "replacement": "" },
8
+ { "description": "Space after keywords", "pattern": "\\b(if|for|while|switch|catch|return)\\(", "replacement": "$1 (" },
9
+ { "description": "Space before opening brace", "pattern": "\\)\\{", "replacement": ") {" },
10
+ { "description": "Consistent arrow function spacing", "pattern": "=>\\{", "replacement": "=> {" },
11
+ { "description": "Space after commas in JSX props", "pattern": "(\\w)=\\{", "replacement": "$1={" },
12
+ { "description": "Remove multiple blank lines", "pattern": "\\n{3,}", "replacement": "\\n\\n" },
13
+ { "description": "Normalize imports", "pattern": "import\\s+\\{\\s*(\\S+)\\s*\\}", "replacement": "import { $1 }" },
14
+ { "description": "Semicolon enforcement", "pattern": "(?<!;|\\{|\\}|\\*\\/)\\s*$", "replacement": ";" },
15
+ { "description": "JSX self-closing space", "pattern": "(\\w)\\/>", "replacement": "$1 />" },
16
+ { "description": "Normalize line endings", "pattern": "\\r\\n", "replacement": "\\n" }
17
+ ],
18
+ "indentation": {
19
+ "increasePattern": "(?:\\{[^}]*$|\\([^)]*$|<[^/][^>]*[^/]>\\s*$|=>\\s*$)",
20
+ "decreasePattern": "^\\s*[}\\)\\]]|^\\s*<\\/|^\\s*\\/>|^\\s*\\)\\s*;?\\s*$"
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "language": "react",
3
+ "formatting": {
4
+ "defaultTabSize": 2,
5
+ "defaultInsertSpaces": true,
6
+ "rules": [
7
+ {
8
+ "description": "Self-closing JSX tags for void elements",
9
+ "pattern": "<(\\w+)([^>]*)><\\/\\1>",
10
+ "replacement": "<$1$2 />"
11
+ },
12
+ {
13
+ "description": "Consistent JSX expression spacing",
14
+ "pattern": "\\{\\s+([^}]+?)\\s+\\}",
15
+ "replacement": "{$1}"
16
+ },
17
+ {
18
+ "description": "Arrow function component spacing",
19
+ "pattern": "=\\s*\\(([^)]*?)\\)\\s*=>\\s*\\{",
20
+ "replacement": "= ($1) => {"
21
+ },
22
+ {
23
+ "description": "JSX prop alignment on multiple lines",
24
+ "pattern": "<(\\w+)\\s+([\\s\\S]*?)\\s*\\/?>",
25
+ "replacement": "<$1\n $2\n/>"
26
+ },
27
+ {
28
+ "description": "Import statement sorting - React imports first",
29
+ "pattern": "import\\s+(?!React)(.*)\\s+from\\s+['\"]react['\"]",
30
+ "replacement": "import React, { $1 } from 'react'"
31
+ },
32
+ {
33
+ "description": "Normalize JSX boolean props",
34
+ "pattern": "(\\w+)=\\{true\\}",
35
+ "replacement": "$1"
36
+ },
37
+ {
38
+ "description": "Consistent hook dependency array formatting",
39
+ "pattern": "\\},\\s*\\[([^\\]]+)\\]\\s*\\)",
40
+ "replacement": "}, [$1])"
41
+ },
42
+ {
43
+ "description": "Normalize event handler naming",
44
+ "pattern": "on(\\w+)=\\{\\(\\)\\s*=>\\s*([^}]+)\\}",
45
+ "replacement": "on$1={() => $2}"
46
+ },
47
+ {
48
+ "description": "Trim trailing whitespace in JSX content",
49
+ "pattern": "(>)\\s+(\\S)",
50
+ "replacement": "$1$2"
51
+ },
52
+ {
53
+ "description": "Consistent return statement with JSX parentheses",
54
+ "pattern": "return\\s+(<[A-Z])",
55
+ "replacement": "return (\n $1"
56
+ }
57
+ ],
58
+ "indentation": {
59
+ "component": 0,
60
+ "jsx": 2,
61
+ "jsxAttributes": 2,
62
+ "jsxChildren": 2,
63
+ "hookBody": 2,
64
+ "switchCase": 2,
65
+ "objectLiteral": 2,
66
+ "arrayLiteral": 2,
67
+ "functionBody": 2,
68
+ "conditionalExpression": 2
69
+ }
70
+ }
71
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "language": "shadcn",
3
+ "formattingRules": [
4
+ {
5
+ "context": "JSX props",
6
+ "rule": "Align props vertically when more than two props are present, one per line",
7
+ "description": "Multi-prop JSX elements should have each prop on its own line, aligned with the first prop"
8
+ },
9
+ {
10
+ "context": "className strings",
11
+ "rule": "Use template literals or cn() for dynamic class names; keep static strings as plain string literals",
12
+ "description": "Static class strings stay as double-quoted literals; dynamic classes use cn() calls"
13
+ },
14
+ {
15
+ "context": "cn() arguments",
16
+ "rule": "Place each argument on its own line when there are more than two arguments",
17
+ "description": "Multi-argument cn() calls should have each argument on a separate line for readability"
18
+ },
19
+ {
20
+ "context": "cva() variant objects",
21
+ "rule": "Format variant keys and values with each variant axis as a separate block, values indented within",
22
+ "description": "The variants object in cva() should clearly delineate each axis (variant, size) as indented blocks"
23
+ },
24
+ {
25
+ "context": "Import grouping",
26
+ "rule": "Group imports in order: React/Next → third-party (Radix, zod, react-hook-form) → @/components/ui/* → @/lib/utils → relative imports",
27
+ "description": "Imports should follow a consistent grouping order with blank lines between groups"
28
+ },
29
+ {
30
+ "context": "Component prop ordering",
31
+ "rule": "Order props: ref → key → variant/size → className → event handlers → spread props → children",
32
+ "description": "Maintain consistent prop ordering across shadcn components"
33
+ },
34
+ {
35
+ "context": "Variant definition alignment",
36
+ "rule": "Align variant class strings to the same indentation level within a cva() definition",
37
+ "description": "Variant value strings should be visually aligned for quick scanning"
38
+ },
39
+ {
40
+ "context": "Form field nesting",
41
+ "rule": "Nest FormItem > FormLabel > FormControl > FormDescription > FormMessage with consistent 2-space indentation",
42
+ "description": "Form field sub-components follow a strict nesting hierarchy"
43
+ },
44
+ {
45
+ "context": "Tailwind class ordering",
46
+ "rule": "Order Tailwind classes: layout (flex, grid) → sizing (w, h) → spacing (p, m) → typography → colors → borders → effects → states (hover, focus)",
47
+ "description": "Follow a consistent Tailwind utility class ordering convention"
48
+ },
49
+ {
50
+ "context": "Multi-line JSX",
51
+ "rule": "Indent JSX children by 2 spaces; closing tags align with opening tags",
52
+ "description": "JSX blocks use 2-space indentation with closing tags at the same level as their opening counterpart"
53
+ }
54
+ ],
55
+ "indentation": {
56
+ "useTabs": false,
57
+ "tabSize": 2,
58
+ "trimTrailingWhitespace": true,
59
+ "insertFinalNewline": true
60
+ }
61
+ }
@@ -1,19 +1,103 @@
1
- {
2
- "language": "shell",
3
- "formatting": {
4
- "defaultTabSize": 4,
5
- "defaultInsertSpaces": true,
6
- "rules": [
7
- {
8
- "description": "Remove trailing whitespace",
9
- "pattern": "\\s+$",
10
- "replacement": ""
11
- },
12
- {
13
- "description": "Normalize line endings",
14
- "pattern": "\\r\\n",
15
- "replacement": "\\n"
16
- }
17
- ]
18
- }
19
- }
1
+ {
2
+ "language": "shell",
3
+ "formatting": {
4
+ "defaultTabSize": 4,
5
+ "defaultInsertSpaces": true,
6
+ "rules": [
7
+ {
8
+ "description": "Remove trailing whitespace",
9
+ "pattern": "\\s+$",
10
+ "replacement": ""
11
+ },
12
+ {
13
+ "description": "Normalize line endings",
14
+ "pattern": "\\r\\n",
15
+ "replacement": "\\n"
16
+ },
17
+ {
18
+ "description": "Ensure single space after keywords",
19
+ "pattern": "\\b(if|elif|while|until|for|case|select)\\(",
20
+ "replacement": "$1 ("
21
+ },
22
+ {
23
+ "description": "Ensure space inside [[ ]] brackets",
24
+ "pattern": "\\[\\[(\\S)",
25
+ "replacement": "[[ $1"
26
+ },
27
+ {
28
+ "description": "Ensure space inside [[ ]] closing",
29
+ "pattern": "(\\S)\\]\\]",
30
+ "replacement": "$1 ]]"
31
+ },
32
+ {
33
+ "description": "Space after # in comments (except shebang)",
34
+ "pattern": "^(\\s*)#([^!\\s#])",
35
+ "replacement": "$1# $2"
36
+ },
37
+ {
38
+ "description": "Remove spaces around = in variable assignment",
39
+ "pattern": "(\\w+)\\s*=\\s*([^=])",
40
+ "replacement": "$1=$2"
41
+ },
42
+ {
43
+ "description": "Single blank line between functions",
44
+ "pattern": "\\}\\n{3,}(?=\\w+\\s*\\(\\)|function\\s)",
45
+ "replacement": "}\n\n"
46
+ },
47
+ {
48
+ "description": "Ensure space after ; in compound commands",
49
+ "pattern": ";(\\w)",
50
+ "replacement": "; $1"
51
+ },
52
+ {
53
+ "description": "Normalize then/do placement (same line)",
54
+ "pattern": "\\b(if|elif|while|until|for)\\b(.+)\\n\\s*\\b(then|do)\\b",
55
+ "replacement": "$1$2; $3"
56
+ },
57
+ {
58
+ "description": "Ensure newline before fi/done/esac",
59
+ "pattern": ";\\s*(fi|done|esac)\\b",
60
+ "replacement": "\n$1"
61
+ },
62
+ {
63
+ "description": "Normalize heredoc indentation for <<-",
64
+ "pattern": "<<-\\s*(\\w+)",
65
+ "replacement": "<<-\t$1"
66
+ },
67
+ {
68
+ "description": "No space before semicolons",
69
+ "pattern": "\\s+;",
70
+ "replacement": ";"
71
+ },
72
+ {
73
+ "description": "Ensure space around pipe operators",
74
+ "pattern": "(\\S)\\|(\\S)",
75
+ "replacement": "$1 | $2"
76
+ },
77
+ {
78
+ "description": "Ensure space around redirections",
79
+ "pattern": "(\\w)(>>?|<<?)(?=[^<>&])(\\S)",
80
+ "replacement": "$1 $2 $3"
81
+ },
82
+ {
83
+ "description": "Remove trailing whitespace",
84
+ "pattern": "\\\\s+$",
85
+ "replacement": ""
86
+ },
87
+ {
88
+ "description": "Ensure single space after keywords",
89
+ "pattern": "\\\\b(if|for|while|until|case|select)\\\\(",
90
+ "replacement": "$1 ("
91
+ },
92
+ {
93
+ "description": "Normalize line endings",
94
+ "pattern": "\\\\r\\\\n",
95
+ "replacement": "\\n"
96
+ }
97
+ ],
98
+ "indentation": {
99
+ "increasePattern": "(?:then|do|else|elif\\s.*then|\\{|\\()\\s*(?:#.*)?$|^\\s*(?:if|elif|while|until|for|select)\\b.*[^;]$",
100
+ "decreasePattern": "^\\s*(?:fi|done|else|elif|esac|\\}|\\))\\b"
101
+ }
102
+ }
103
+ }