@likec4/language-server 1.43.0 → 1.45.0

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 (301) hide show
  1. package/browser/package.json +1 -1
  2. package/browser-worker/package.json +1 -1
  3. package/dist/LikeC4LanguageServices.d.ts +13 -34
  4. package/dist/LikeC4LanguageServices.js +152 -0
  5. package/dist/Rpc.js +257 -0
  6. package/dist/ast.d.ts +5 -1
  7. package/dist/ast.js +257 -0
  8. package/dist/browser-worker.js +4 -0
  9. package/dist/browser.js +35 -0
  10. package/dist/bundled.js +44 -0
  11. package/dist/bundled.mjs +3568 -3900
  12. package/dist/documentation/documentation-provider.js +51 -0
  13. package/dist/documentation/index.js +1 -0
  14. package/dist/empty.js +2 -0
  15. package/dist/filesystem/ChokidarWatcher.d.ts +2 -0
  16. package/dist/filesystem/ChokidarWatcher.js +108 -0
  17. package/dist/filesystem/FileSystemWatcher.js +14 -0
  18. package/dist/filesystem/LikeC4FileSystem.d.ts +1 -2
  19. package/dist/filesystem/LikeC4FileSystem.js +126 -0
  20. package/dist/filesystem/index.d.ts +26 -0
  21. package/dist/filesystem/index.js +29 -0
  22. package/dist/formatting/LikeC4Formatter.js +637 -0
  23. package/dist/formatting/utils.js +18 -0
  24. package/dist/generated/ast.js +2155 -0
  25. package/dist/generated/{grammar.mjs → grammar.js} +6 -2
  26. package/dist/generated/module.d.ts +6 -1
  27. package/dist/generated/module.js +27 -0
  28. package/dist/generated-lib/{icons.mjs → icons.js} +11 -7
  29. package/dist/index.d.ts +10 -1
  30. package/dist/index.js +55 -0
  31. package/dist/{likec4lib.mjs → likec4lib.js} +3 -3
  32. package/dist/logger.js +81 -0
  33. package/dist/lsp/CodeActionProvider.d.ts +14 -0
  34. package/dist/lsp/CodeActionProvider.js +33 -0
  35. package/dist/lsp/CodeLensProvider.js +44 -0
  36. package/dist/lsp/CompletionProvider.d.ts +3 -1
  37. package/dist/lsp/CompletionProvider.js +200 -0
  38. package/dist/lsp/DocumentHighlightProvider.js +10 -0
  39. package/dist/lsp/DocumentLinkProvider.js +58 -0
  40. package/dist/lsp/DocumentSymbolProvider.js +306 -0
  41. package/dist/lsp/HoverProvider.js +106 -0
  42. package/dist/lsp/RenameProvider.js +6 -0
  43. package/dist/lsp/SemanticTokenProvider.js +257 -0
  44. package/dist/lsp/index.d.ts +1 -0
  45. package/dist/lsp/index.js +9 -0
  46. package/dist/mcp/MCPServerFactory.js +73 -0
  47. package/dist/mcp/NoopLikeC4MCPServer.js +17 -0
  48. package/dist/mcp/interfaces.js +5 -0
  49. package/dist/mcp/server/StdioLikeC4MCPServer.js +51 -0
  50. package/dist/mcp/server/StreamableLikeC4MCPServer.js +145 -0
  51. package/dist/mcp/server/WithMCPServer.js +56 -0
  52. package/dist/mcp/tools/_common.d.ts +8 -7
  53. package/dist/mcp/tools/_common.js +49 -0
  54. package/dist/mcp/tools/find-relationships.d.ts +7 -8
  55. package/dist/mcp/tools/find-relationships.js +150 -0
  56. package/dist/mcp/tools/list-projects.d.ts +3 -3
  57. package/dist/mcp/tools/list-projects.js +62 -0
  58. package/dist/mcp/tools/open-view.d.ts +6 -7
  59. package/dist/mcp/tools/open-view.js +52 -0
  60. package/dist/mcp/tools/read-deployment.d.ts +6 -7
  61. package/dist/mcp/tools/read-deployment.js +132 -0
  62. package/dist/mcp/tools/read-element.d.ts +6 -7
  63. package/dist/mcp/tools/read-element.js +194 -0
  64. package/dist/mcp/tools/read-project-summary.d.ts +5 -6
  65. package/dist/mcp/tools/read-project-summary.js +176 -0
  66. package/dist/mcp/tools/read-view.d.ts +6 -7
  67. package/dist/mcp/tools/read-view.js +203 -0
  68. package/dist/mcp/tools/search-element.d.ts +3 -3
  69. package/dist/mcp/tools/search-element.js +177 -0
  70. package/dist/mcp/utils.d.ts +2 -2
  71. package/dist/mcp/utils.js +48 -0
  72. package/dist/model/builder/MergedExtends.js +74 -0
  73. package/dist/model/builder/MergedSpecification.js +175 -0
  74. package/dist/model/builder/buildModel.js +176 -0
  75. package/dist/model/deployments-index.js +102 -0
  76. package/dist/model/fqn-index.d.ts +1 -2
  77. package/dist/model/fqn-index.js +247 -0
  78. package/dist/model/index.js +6 -0
  79. package/dist/model/model-builder.d.ts +13 -11
  80. package/dist/model/model-builder.js +232 -0
  81. package/dist/model/model-locator.d.ts +6 -5
  82. package/dist/model/model-locator.js +240 -0
  83. package/dist/model/model-parser-where.js +81 -0
  84. package/dist/model/model-parser.d.ts +309 -304
  85. package/dist/model/model-parser.js +126 -0
  86. package/dist/model/parser/Base.d.ts +2 -2
  87. package/dist/model/parser/Base.js +367 -0
  88. package/dist/model/parser/DeploymentModelParser.d.ts +2 -2
  89. package/dist/model/parser/DeploymentModelParser.js +176 -0
  90. package/dist/model/parser/DeploymentViewParser.d.ts +3 -3
  91. package/dist/model/parser/DeploymentViewParser.js +86 -0
  92. package/dist/model/parser/FqnRefParser.d.ts +2 -2
  93. package/dist/model/parser/FqnRefParser.js +382 -0
  94. package/dist/model/parser/GlobalsParser.d.ts +6 -6
  95. package/dist/model/parser/GlobalsParser.js +84 -0
  96. package/dist/model/parser/ImportsParser.d.ts +11 -12
  97. package/dist/model/parser/ImportsParser.js +24 -0
  98. package/dist/model/parser/ModelParser.d.ts +2 -2
  99. package/dist/model/parser/ModelParser.js +165 -0
  100. package/dist/model/parser/PredicatesParser.d.ts +2 -2
  101. package/dist/model/parser/PredicatesParser.js +45 -0
  102. package/dist/model/parser/SpecificationParser.d.ts +2 -2
  103. package/dist/model/parser/SpecificationParser.js +113 -0
  104. package/dist/model/parser/ValueConverter.js +12 -0
  105. package/dist/model/parser/ViewsParser.d.ts +3 -3
  106. package/dist/model/parser/ViewsParser.js +479 -0
  107. package/dist/model-change/ModelChanges.d.ts +8 -5
  108. package/dist/model-change/ModelChanges.js +129 -0
  109. package/dist/model-change/changeElementStyle.js +134 -0
  110. package/dist/model-change/changeViewLayout.d.ts +2 -2
  111. package/dist/model-change/changeViewLayout.js +28 -0
  112. package/dist/model-change/removeManualLayoutV1.d.ts +7 -0
  113. package/dist/model-change/removeManualLayoutV1.js +27 -0
  114. package/dist/module.d.ts +10 -5
  115. package/dist/module.js +143 -0
  116. package/dist/protocol.d.ts +34 -27
  117. package/dist/protocol.js +123 -0
  118. package/dist/references/index.js +3 -0
  119. package/dist/references/name-provider.js +37 -0
  120. package/dist/references/scope-computation.js +288 -0
  121. package/dist/references/scope-provider.d.ts +3 -3
  122. package/dist/references/scope-provider.js +242 -0
  123. package/dist/shared/NodeKindProvider.js +57 -0
  124. package/dist/shared/{WorkspaceSymbolProvider.mjs → WorkspaceSymbolProvider.js} +1 -1
  125. package/dist/shared/index.js +2 -0
  126. package/dist/test/index.js +1 -0
  127. package/dist/test/testServices.d.ts +16 -16
  128. package/dist/test/testServices.js +210 -0
  129. package/dist/utils/disposable.js +26 -0
  130. package/dist/utils/elementRef.d.ts +1 -1
  131. package/dist/utils/elementRef.js +27 -0
  132. package/dist/utils/fqnRef.js +63 -0
  133. package/dist/utils/index.js +35 -0
  134. package/dist/utils/printDocs.js +1 -0
  135. package/dist/utils/projectId.js +16 -0
  136. package/dist/utils/stringHash.js +5 -0
  137. package/dist/validation/DocumentValidator.js +17 -0
  138. package/dist/validation/_shared.js +26 -0
  139. package/dist/validation/deployment-checks.js +140 -0
  140. package/dist/validation/dynamic-view.js +67 -0
  141. package/dist/validation/element-ref.js +12 -0
  142. package/dist/validation/element.js +49 -0
  143. package/dist/validation/imports.js +46 -0
  144. package/dist/validation/index.d.ts +1 -1
  145. package/dist/validation/index.js +157 -0
  146. package/dist/validation/property-checks.js +108 -0
  147. package/dist/validation/relation.js +55 -0
  148. package/dist/validation/specification.js +190 -0
  149. package/dist/validation/view-predicates/fqn-expr-with.js +43 -0
  150. package/dist/validation/view-predicates/fqn-ref-expr.js +51 -0
  151. package/dist/validation/view-predicates/incoming.js +16 -0
  152. package/dist/validation/view-predicates/index.js +6 -0
  153. package/dist/validation/view-predicates/outgoing.js +20 -0
  154. package/dist/validation/view-predicates/relation-expr.js +46 -0
  155. package/dist/validation/view-predicates/relation-with.js +16 -0
  156. package/dist/validation/view.d.ts +1 -1
  157. package/dist/validation/view.js +42 -0
  158. package/dist/view-utils/assignNavigateTo.js +27 -0
  159. package/dist/view-utils/index.d.ts +1 -0
  160. package/dist/view-utils/index.js +2 -0
  161. package/dist/view-utils/manual-layout.d.ts +6 -0
  162. package/dist/view-utils/manual-layout.js +149 -0
  163. package/dist/views/ConfigurableLayouter.js +51 -0
  164. package/dist/views/LikeC4ManualLayouts.d.ts +42 -0
  165. package/dist/views/LikeC4ManualLayouts.js +209 -0
  166. package/dist/views/{likec4-views.d.ts → LikeC4Views.d.ts} +32 -10
  167. package/dist/views/LikeC4Views.js +216 -0
  168. package/dist/views/index.d.ts +4 -1
  169. package/dist/views/index.js +11 -0
  170. package/dist/workspace/AstNodeDescriptionProvider.js +18 -0
  171. package/dist/workspace/IndexManager.js +21 -0
  172. package/dist/workspace/LangiumDocuments.d.ts +4 -3
  173. package/dist/workspace/LangiumDocuments.js +72 -0
  174. package/dist/workspace/ProjectsManager.d.ts +25 -16
  175. package/dist/workspace/ProjectsManager.js +469 -0
  176. package/dist/workspace/WorkspaceManager.d.ts +3 -2
  177. package/dist/workspace/WorkspaceManager.js +98 -0
  178. package/dist/workspace/index.js +5 -0
  179. package/likec4lib/package.json +1 -1
  180. package/package.json +30 -28
  181. package/protocol/package.json +1 -1
  182. package/dist/LikeC4LanguageServices.mjs +0 -197
  183. package/dist/Rpc.mjs +0 -296
  184. package/dist/ast.mjs +0 -221
  185. package/dist/browser-worker.mjs +0 -2
  186. package/dist/browser.mjs +0 -32
  187. package/dist/documentation/documentation-provider.mjs +0 -48
  188. package/dist/documentation/index.mjs +0 -1
  189. package/dist/empty.mjs +0 -1
  190. package/dist/filesystem/ChokidarWatcher.mjs +0 -68
  191. package/dist/filesystem/FileSystemWatcher.mjs +0 -11
  192. package/dist/filesystem/LikeC4FileSystem.mjs +0 -64
  193. package/dist/filesystem/index.mjs +0 -19
  194. package/dist/formatting/LikeC4Formatter.mjs +0 -511
  195. package/dist/formatting/utils.mjs +0 -15
  196. package/dist/generated/ast.mjs +0 -2150
  197. package/dist/generated/module.mjs +0 -23
  198. package/dist/index.mjs +0 -50
  199. package/dist/logger.mjs +0 -82
  200. package/dist/lsp/CodeLensProvider.mjs +0 -42
  201. package/dist/lsp/CompletionProvider.mjs +0 -208
  202. package/dist/lsp/DocumentHighlightProvider.mjs +0 -10
  203. package/dist/lsp/DocumentLinkProvider.mjs +0 -53
  204. package/dist/lsp/DocumentSymbolProvider.mjs +0 -287
  205. package/dist/lsp/HoverProvider.mjs +0 -104
  206. package/dist/lsp/RenameProvider.mjs +0 -6
  207. package/dist/lsp/SemanticTokenProvider.mjs +0 -276
  208. package/dist/lsp/index.mjs +0 -7
  209. package/dist/mcp/MCPServerFactory.mjs +0 -70
  210. package/dist/mcp/NoopLikeC4MCPServer.mjs +0 -17
  211. package/dist/mcp/interfaces.mjs +0 -4
  212. package/dist/mcp/server/StdioLikeC4MCPServer.mjs +0 -46
  213. package/dist/mcp/server/StreamableLikeC4MCPServer.mjs +0 -153
  214. package/dist/mcp/server/WithMCPServer.mjs +0 -58
  215. package/dist/mcp/tools/_common.mjs +0 -42
  216. package/dist/mcp/tools/find-relationships.mjs +0 -151
  217. package/dist/mcp/tools/list-projects.mjs +0 -62
  218. package/dist/mcp/tools/open-view.mjs +0 -52
  219. package/dist/mcp/tools/read-deployment.mjs +0 -130
  220. package/dist/mcp/tools/read-element.mjs +0 -198
  221. package/dist/mcp/tools/read-project-summary.mjs +0 -178
  222. package/dist/mcp/tools/read-view.mjs +0 -205
  223. package/dist/mcp/tools/search-element.mjs +0 -171
  224. package/dist/mcp/utils.mjs +0 -47
  225. package/dist/model/builder/MergedExtends.mjs +0 -76
  226. package/dist/model/builder/MergedSpecification.mjs +0 -205
  227. package/dist/model/builder/assignTagColors.d.ts +0 -7
  228. package/dist/model/builder/assignTagColors.mjs +0 -51
  229. package/dist/model/builder/buildModel.mjs +0 -226
  230. package/dist/model/deployments-index.mjs +0 -100
  231. package/dist/model/fqn-index.mjs +0 -243
  232. package/dist/model/index.mjs +0 -6
  233. package/dist/model/model-builder.mjs +0 -285
  234. package/dist/model/model-locator.mjs +0 -239
  235. package/dist/model/model-parser-where.mjs +0 -81
  236. package/dist/model/model-parser.mjs +0 -127
  237. package/dist/model/parser/Base.mjs +0 -376
  238. package/dist/model/parser/DeploymentModelParser.mjs +0 -212
  239. package/dist/model/parser/DeploymentViewParser.mjs +0 -95
  240. package/dist/model/parser/FqnRefParser.mjs +0 -398
  241. package/dist/model/parser/GlobalsParser.mjs +0 -82
  242. package/dist/model/parser/ImportsParser.mjs +0 -28
  243. package/dist/model/parser/ModelParser.mjs +0 -190
  244. package/dist/model/parser/PredicatesParser.mjs +0 -45
  245. package/dist/model/parser/SpecificationParser.mjs +0 -120
  246. package/dist/model/parser/ValueConverter.mjs +0 -12
  247. package/dist/model/parser/ViewsParser.mjs +0 -490
  248. package/dist/model-change/ModelChanges.mjs +0 -89
  249. package/dist/model-change/changeElementStyle.mjs +0 -143
  250. package/dist/model-change/changeViewLayout.mjs +0 -32
  251. package/dist/model-change/saveManualLayout.d.ts +0 -11
  252. package/dist/model-change/saveManualLayout.mjs +0 -27
  253. package/dist/module.mjs +0 -180
  254. package/dist/protocol.mjs +0 -65
  255. package/dist/references/index.mjs +0 -3
  256. package/dist/references/name-provider.mjs +0 -39
  257. package/dist/references/scope-computation.mjs +0 -312
  258. package/dist/references/scope-provider.mjs +0 -239
  259. package/dist/shared/NodeKindProvider.mjs +0 -110
  260. package/dist/shared/index.mjs +0 -2
  261. package/dist/test/index.mjs +0 -1
  262. package/dist/test/testServices.mjs +0 -200
  263. package/dist/utils/disposable.mjs +0 -25
  264. package/dist/utils/elementRef.mjs +0 -20
  265. package/dist/utils/fqnRef.mjs +0 -57
  266. package/dist/utils/index.mjs +0 -33
  267. package/dist/utils/printDocs.mjs +0 -1
  268. package/dist/utils/projectId.mjs +0 -16
  269. package/dist/utils/stringHash.mjs +0 -5
  270. package/dist/validation/DocumentValidator.mjs +0 -16
  271. package/dist/validation/_shared.mjs +0 -25
  272. package/dist/validation/deployment-checks.mjs +0 -146
  273. package/dist/validation/dynamic-view.mjs +0 -67
  274. package/dist/validation/element-ref.mjs +0 -12
  275. package/dist/validation/element.mjs +0 -50
  276. package/dist/validation/imports.mjs +0 -25
  277. package/dist/validation/index.mjs +0 -180
  278. package/dist/validation/property-checks.mjs +0 -107
  279. package/dist/validation/relation.mjs +0 -53
  280. package/dist/validation/specification.mjs +0 -173
  281. package/dist/validation/view-predicates/fqn-expr-with.mjs +0 -43
  282. package/dist/validation/view-predicates/fqn-ref-expr.mjs +0 -53
  283. package/dist/validation/view-predicates/incoming.mjs +0 -16
  284. package/dist/validation/view-predicates/index.mjs +0 -6
  285. package/dist/validation/view-predicates/outgoing.mjs +0 -20
  286. package/dist/validation/view-predicates/relation-expr.mjs +0 -39
  287. package/dist/validation/view-predicates/relation-with.mjs +0 -16
  288. package/dist/validation/view.mjs +0 -25
  289. package/dist/view-utils/assignNavigateTo.mjs +0 -25
  290. package/dist/view-utils/index.mjs +0 -1
  291. package/dist/view-utils/manual-layout.mjs +0 -99
  292. package/dist/views/configurable-layouter.mjs +0 -51
  293. package/dist/views/index.mjs +0 -1
  294. package/dist/views/likec4-views.mjs +0 -166
  295. package/dist/workspace/AstNodeDescriptionProvider.mjs +0 -17
  296. package/dist/workspace/IndexManager.mjs +0 -17
  297. package/dist/workspace/LangiumDocuments.mjs +0 -53
  298. package/dist/workspace/ProjectsManager.mjs +0 -360
  299. package/dist/workspace/WorkspaceManager.mjs +0 -83
  300. package/dist/workspace/index.mjs +0 -5
  301. /package/dist/views/{configurable-layouter.d.ts → ConfigurableLayouter.d.ts} +0 -0
@@ -1,64 +0,0 @@
1
- import { isLikeC4Config, loadConfig } from "@likec4/config/node";
2
- import { fdir } from "fdir";
3
- import { URI } from "langium";
4
- import { NodeFileSystemProvider } from "langium/node";
5
- import { LikeC4LanguageMetaData } from "../generated/module.mjs";
6
- import { Content, isLikeC4Builtin } from "../likec4lib.mjs";
7
- import { logger as rootLogger } from "../logger.mjs";
8
- import { chokidarFileSystemWatcher } from "./ChokidarWatcher.mjs";
9
- import { noopFileSystemWatcher } from "./FileSystemWatcher.mjs";
10
- const logger = rootLogger.getChild("filesystem");
11
- export const LikeC4FileSystem = (ehableWatcher = true) => ({
12
- fileSystemProvider: () => new SymLinkTraversingFileSystemProvider(),
13
- ...ehableWatcher ? chokidarFileSystemWatcher : noopFileSystemWatcher
14
- });
15
- export const isLikeC4File = (path) => LikeC4LanguageMetaData.fileExtensions.some((ext) => path.endsWith(ext));
16
- export const isAnyLikeC4File = (path) => isLikeC4File(path) || isLikeC4Config(path);
17
- class SymLinkTraversingFileSystemProvider extends NodeFileSystemProvider {
18
- async readFile(uri) {
19
- if (isLikeC4Builtin(uri)) {
20
- return Promise.resolve(Content);
21
- }
22
- try {
23
- return await super.readFile(uri);
24
- } catch (error) {
25
- logger.error(`Failed to read file ${uri.fsPath}`, { error });
26
- return "";
27
- }
28
- }
29
- async readDirectory(folderPath) {
30
- const entries = [];
31
- try {
32
- const crawled = await new fdir().withSymlinks({ resolvePaths: false }).withFullPaths().filter(isLikeC4File).crawl(folderPath.fsPath).withPromise();
33
- for (const path of crawled) {
34
- entries.push({
35
- isFile: true,
36
- isDirectory: false,
37
- uri: URI.file(path)
38
- });
39
- }
40
- } catch (error) {
41
- logger.error(`Failed to read directory ${folderPath.fsPath}`, { error });
42
- }
43
- return entries;
44
- }
45
- async scanProjectFiles(folderUri) {
46
- const entries = [];
47
- try {
48
- const crawled = await new fdir().withSymlinks({ resolvePaths: false }).withFullPaths().filter(isLikeC4Config).crawl(folderUri.fsPath).withPromise();
49
- for (const path of crawled) {
50
- entries.push({
51
- isFile: true,
52
- isDirectory: false,
53
- uri: URI.file(path)
54
- });
55
- }
56
- } catch (error) {
57
- logger.error(`Failed to scan project files ${folderUri.fsPath}`, { error });
58
- }
59
- return entries;
60
- }
61
- async loadProjectConfig(filepath) {
62
- return await loadConfig(filepath);
63
- }
64
- }
@@ -1,19 +0,0 @@
1
- import { noopFileSystemWatcher } from "./FileSystemWatcher.mjs";
2
- export class NoopFileSystemProvider {
3
- scanProjectFiles() {
4
- return Promise.resolve([]);
5
- }
6
- readFile() {
7
- throw new Error("No file system is available.");
8
- }
9
- readDirectory() {
10
- return Promise.resolve([]);
11
- }
12
- loadProjectConfig() {
13
- throw new Error("No file system is available.");
14
- }
15
- }
16
- export const NoopFileSystem = {
17
- fileSystemProvider: () => new NoopFileSystemProvider(),
18
- ...noopFileSystemWatcher
19
- };
@@ -1,511 +0,0 @@
1
- import { nonexhaustive } from "@likec4/core";
2
- import {
3
- GrammarUtils
4
- } from "langium";
5
- import { AbstractFormatter, Formatting } from "langium/lsp";
6
- import { filter, isTruthy } from "remeda";
7
- import * as ast from "../generated/ast.mjs";
8
- import * as utils from "./utils.mjs";
9
- import { isMultiline } from "./utils.mjs";
10
- const FormattingOptions = {
11
- newLine: Formatting.newLine({ allowMore: true }),
12
- oneSpace: Formatting.oneSpace(),
13
- noSpace: Formatting.noSpace(),
14
- indent: Formatting.indent({ allowMore: true }),
15
- noIndent: Formatting.noIndent()
16
- };
17
- export class LikeC4Formatter extends AbstractFormatter {
18
- options = {
19
- quoteStyle: "auto"
20
- };
21
- extendedFormattingCommands = [];
22
- constructor(services) {
23
- super();
24
- services.shared.workspace.ConfigurationProvider.onConfigurationSectionUpdate(
25
- (update) => this.onConfigurationUpdate(update.configuration.formatting)
26
- );
27
- }
28
- doDocumentFormat(document, options, range) {
29
- this.extendedFormattingCommands = [];
30
- const edits = super.doDocumentFormat(document, options, range);
31
- this.doExtendedFormatting(edits);
32
- return edits;
33
- }
34
- format(node) {
35
- this.removeIndentFromTopLevelStatements(node);
36
- this.indentContentInBraces(node);
37
- this.normalizeQuotes(node);
38
- this.formatImports(node);
39
- this.formatSpecificationRule(node);
40
- this.formatGlobals(node);
41
- this.formatElementDeclaration(node);
42
- this.formatExtendElement(node);
43
- this.formatRelation(node);
44
- this.formatMetadataProperty(node);
45
- this.formatDeploymentNodeDeclaration(node);
46
- this.formatDeployedInstance(node);
47
- this.formatDeploymentRelation(node);
48
- this.formatExtendDeployment(node);
49
- this.formatView(node);
50
- this.formatViewRuleGroup(node);
51
- this.formatViewRuleGlobalStyle(node);
52
- this.formatViewRuleGlobalPredicate(node);
53
- this.formatIncludeExcludeExpressions(node);
54
- this.formatWhereExpression(node);
55
- this.formatWhereRelationExpression(node);
56
- this.formatWhereElementExpression(node);
57
- this.formatRelationExpression(node);
58
- this.formatAutolayoutProperty(node);
59
- this.formatWithPredicate(node);
60
- this.formatViewRuleStyle(node);
61
- this.formatLeafProperty(node);
62
- this.formatLinkProperty(node);
63
- this.formatNavigateToProperty(node);
64
- this.formatTags(node);
65
- }
66
- formatTags(node) {
67
- this.on(node, ast.isTags, (n, f) => {
68
- const tags = GrammarUtils.findNodesForProperty(n.$cstNode, "values").filter(isTruthy).slice(1);
69
- f.cst(tags).prepend(FormattingOptions.oneSpace);
70
- f.keywords(",").prepend(FormattingOptions.noSpace).append(FormattingOptions.oneSpace);
71
- });
72
- }
73
- formatDeploymentRelation(node) {
74
- this.on(node, ast.isDeploymentRelation, (n, f) => {
75
- const sourceNodes = n?.source?.$cstNode ? [n?.source?.$cstNode] : [];
76
- f.cst(sourceNodes).append(FormattingOptions.oneSpace);
77
- f.keywords("]->").prepend(FormattingOptions.noSpace);
78
- f.keywords("-[").append(FormattingOptions.noSpace);
79
- f.nodes(...filter([
80
- n.target,
81
- n.tags
82
- ], isTruthy)).prepend(FormattingOptions.oneSpace);
83
- f.properties("title", "description", "technology").prepend(FormattingOptions.oneSpace);
84
- });
85
- }
86
- formatExtendDeployment(node) {
87
- this.on(node, ast.isExtendDeployment, (n, f) => {
88
- f.keywords("extend").append(FormattingOptions.oneSpace);
89
- });
90
- }
91
- formatRelation(node) {
92
- this.on(
93
- node,
94
- (n) => ast.isRelation(n) || ast.isDeploymentRelation(n),
95
- (n, f) => {
96
- const sourceNodes = n?.source?.$cstNode ? [n?.source?.$cstNode] : [];
97
- f.cst(sourceNodes).append(FormattingOptions.oneSpace);
98
- f.keywords("]->").prepend(FormattingOptions.noSpace);
99
- f.keywords("-[").append(FormattingOptions.noSpace);
100
- f.nodes(...filter([
101
- n.target,
102
- n.tags
103
- ], isTruthy)).prepend(FormattingOptions.oneSpace);
104
- f.properties("title", "description", "technology").prepend(FormattingOptions.oneSpace);
105
- }
106
- );
107
- this.on(node, ast.isDynamicViewStep, (n, f) => {
108
- f.keywords("->", "<-").surround(FormattingOptions.oneSpace);
109
- f.property("dotKind").prepend(FormattingOptions.oneSpace).append(FormattingOptions.oneSpace);
110
- f.keywords("]->").prepend(FormattingOptions.noSpace).append(FormattingOptions.oneSpace);
111
- f.keywords("-[").prepend(FormattingOptions.oneSpace).append(FormattingOptions.noSpace);
112
- f.properties("title").prepend(FormattingOptions.oneSpace);
113
- const wrapToNextLine = (
114
- // Dynamic step chain with multiline source
115
- ast.isDynamicStepChain(n) && isMultiline(n.$cstNode) || ast.isDynamicStepSingle(n) && ast.isDynamicStepChain(n.$container) && isMultiline(n.$container.$cstNode)
116
- );
117
- if (!wrapToNextLine) {
118
- return;
119
- }
120
- f.property("dotKind").prepend(Formatting.indent({ allowLess: false, allowMore: true, priority: 2 }));
121
- f.keywords("->", "-[").prepend(Formatting.indent({ allowLess: false, allowMore: true, priority: 2 }));
122
- if (n.custom?.$cstNode && isMultiline(n.custom.$cstNode)) {
123
- f.property("custom").prepend({
124
- options: {
125
- allowLess: false,
126
- allowMore: true,
127
- priority: 2
128
- },
129
- moves: [{
130
- tabs: 1
131
- }]
132
- });
133
- }
134
- });
135
- }
136
- removeIndentFromTopLevelStatements(node) {
137
- if (ast.isLikeC4Grammar(node.$container)) {
138
- const formatter = this.getNodeFormatter(node);
139
- formatter.keywords("specification", "model", "views", "likec4lib", "global", "deployments", "import").prepend(FormattingOptions.noIndent);
140
- }
141
- }
142
- indentContentInBraces(node) {
143
- if (ast.isLikeC4Lib(node) || ast.isSpecificationRule(node) || ast.isSpecificationElementKind(node) || ast.isSpecificationRelationshipKind(node) || ast.isSpecificationDeploymentNodeKind(node) || ast.isGlobals(node) || ast.isGlobalStyle(node) || ast.isGlobalStyleGroup(node) || ast.isGlobalPredicateGroup(node) || ast.isGlobalDynamicPredicateGroup(node) || ast.isGlobalStyleGroup(node) || ast.isModel(node) || ast.isElementBody(node) || ast.isExtendElementBody(node) || ast.isRelationBody(node) || ast.isRelationStyleProperty(node) || ast.isMetadataBody(node) || ast.isModelViews(node) || ast.isElementViewBody(node) || ast.isDynamicViewBody(node) || ast.isDeploymentViewBody(node) || ast.isViewRuleStyle(node) || ast.isViewRuleGroup(node) || ast.isCustomElementProperties(node) || ast.isCustomRelationProperties(node) || ast.isElementStyleProperty(node) || ast.isDynamicViewParallelSteps(node) || ast.isModelDeployments(node) || ast.isDeploymentNodeBody(node) || ast.isDeploymentRelationBody(node) || ast.isDeployedInstanceBody(node) || ast.isExtendDeploymentBody(node)) {
144
- const formatter = this.getNodeFormatter(node);
145
- const openBrace = formatter.keywords("{");
146
- openBrace.prepend(FormattingOptions.noIndent).prepend(FormattingOptions.oneSpace);
147
- const multiline = isMultiline(node.$cstNode);
148
- const closeBrace = formatter.keywords("}");
149
- const interiorNodes = formatter.interior(openBrace, closeBrace);
150
- let previousNode = null;
151
- for (const interiorNode of interiorNodes.nodes) {
152
- if (!multiline) {
153
- formatter.cst([interiorNode]).surround(FormattingOptions.oneSpace);
154
- continue;
155
- }
156
- if (!previousNode || !utils.areOverlap(previousNode, interiorNode)) {
157
- formatter.cst([interiorNode]).prepend(Formatting.newLine({ allowMore: true })).prepend(FormattingOptions.indent);
158
- }
159
- previousNode = interiorNode;
160
- }
161
- if (multiline) {
162
- closeBrace.prepend(FormattingOptions.noIndent).prepend(Formatting.newLine({ allowMore: true }));
163
- } else {
164
- closeBrace.prepend(Formatting.oneSpace({ allowLess: true }));
165
- }
166
- }
167
- }
168
- appendKeywordsWithSpace(node) {
169
- this.on(node, ast.isElementKind)?.keywords("element").append(FormattingOptions.oneSpace);
170
- }
171
- formatView(node) {
172
- this.on(node, ast.isElementView, (n, f) => {
173
- if (n.extends || n.viewOf || n.name) {
174
- f.keywords("view").append(FormattingOptions.oneSpace);
175
- }
176
- f.keywords("of", "extends").surround(FormattingOptions.oneSpace);
177
- });
178
- this.on(node, ast.isDynamicView)?.keywords("dynamic", "view").append(FormattingOptions.oneSpace);
179
- this.on(node, ast.isDeploymentView)?.keywords("deployment", "view").append(FormattingOptions.oneSpace);
180
- }
181
- formatLeafProperty(node) {
182
- if (ast.isElementStringProperty(node) || ast.isRelationStringProperty(node) || ast.isViewStringProperty(node) || ast.isNotationProperty(node) || ast.isNotesProperty(node) || ast.isSpecificationElementStringProperty(node) || ast.isSpecificationRelationshipStringProperty(node) || ast.isColorProperty(node) || ast.isLineProperty(node) || ast.isArrowProperty(node) || ast.isIconProperty(node) || ast.isShapeProperty(node) || ast.isBorderProperty(node) || ast.isOpacityProperty(node) || ast.isMultipleProperty(node) || ast.isShapeSizeProperty(node) || ast.isPaddingSizeProperty(node) || ast.isTextSizeProperty(node)) {
183
- const formatter = this.getNodeFormatter(node);
184
- const colon = formatter.keyword(":");
185
- const propertyName = formatter.keywords(
186
- "title",
187
- "description",
188
- "technology",
189
- "summary",
190
- "notation",
191
- "notes",
192
- "color",
193
- "line",
194
- "head",
195
- "tail",
196
- "icon",
197
- "shape",
198
- "border",
199
- "opacity",
200
- "multiple",
201
- "size",
202
- "padding",
203
- "textSize"
204
- );
205
- if (colon.nodes.length === 0) {
206
- propertyName.append(FormattingOptions.oneSpace);
207
- } else {
208
- colon.prepend(FormattingOptions.noSpace).append(FormattingOptions.oneSpace);
209
- }
210
- formatter.keyword(";").prepend(FormattingOptions.noSpace).append(FormattingOptions.newLine);
211
- }
212
- }
213
- formatLinkProperty(node) {
214
- this.on(node, ast.isLinkProperty, (n, f) => {
215
- f.keyword("link").append(FormattingOptions.oneSpace);
216
- f.property("value").append(FormattingOptions.oneSpace);
217
- f.keyword(":").prepend(FormattingOptions.noSpace).append(FormattingOptions.oneSpace);
218
- f.keyword(";").prepend(FormattingOptions.noSpace).append(FormattingOptions.newLine);
219
- });
220
- }
221
- formatNavigateToProperty(node) {
222
- this.on(node, ast.isNavigateToProperty)?.property("key").append(FormattingOptions.oneSpace);
223
- }
224
- formatAutolayoutProperty(node) {
225
- this.on(node, ast.isViewRuleAutoLayout, (n, f) => {
226
- f.keyword("autoLayout").append(FormattingOptions.oneSpace);
227
- f.property("rankSep").prepend(FormattingOptions.oneSpace);
228
- f.property("nodeSep").prepend(FormattingOptions.oneSpace);
229
- });
230
- }
231
- formatMetadataProperty(node) {
232
- this.on(node, ast.isMetadataAttribute, (n, f) => {
233
- f.property("key").append(FormattingOptions.oneSpace);
234
- f.keyword(":").prepend(FormattingOptions.noSpace).append(FormattingOptions.oneSpace);
235
- f.keyword(";").prepend(FormattingOptions.noSpace).append(FormattingOptions.newLine);
236
- });
237
- }
238
- formatElementDeclaration(node) {
239
- this.on(node, ast.isElement, (n, f) => {
240
- const kind = GrammarUtils.findNodeForProperty(n.$cstNode, "kind");
241
- const name = GrammarUtils.findNodeForProperty(n.$cstNode, "name");
242
- if (name && kind) {
243
- if (utils.compareRanges(name, kind) > 0) {
244
- f.cst([kind]).append(FormattingOptions.oneSpace);
245
- } else {
246
- f.cst([name]).append(FormattingOptions.oneSpace);
247
- f.cst([kind]).prepend(FormattingOptions.oneSpace);
248
- }
249
- }
250
- f.properties("props").prepend(FormattingOptions.oneSpace);
251
- });
252
- }
253
- formatExtendElement(node) {
254
- this.on(node, ast.isExtendElement, (n, f) => {
255
- f.keywords("extend").append(FormattingOptions.oneSpace);
256
- });
257
- }
258
- formatGlobals(node) {
259
- this.on(node, ast.isGlobalStyle, (n, f) => {
260
- f.keyword("style").append(FormattingOptions.oneSpace);
261
- f.property("id").append(FormattingOptions.oneSpace);
262
- });
263
- this.on(node, ast.isGlobalStyleGroup, (n, f) => {
264
- f.keyword("styleGroup").append(FormattingOptions.oneSpace);
265
- });
266
- this.on(node, ast.isGlobalPredicateGroup, (n, f) => {
267
- f.keyword("predicateGroup").append(FormattingOptions.oneSpace);
268
- });
269
- this.on(node, ast.isGlobalDynamicPredicateGroup, (n, f) => {
270
- f.keyword("dynamicPredicateGroup").append(FormattingOptions.oneSpace);
271
- });
272
- }
273
- formatImports(node) {
274
- this.on(node, ast.isImportsFromPoject, (n, f) => {
275
- f.keyword("import").append(FormattingOptions.oneSpace);
276
- f.keywords("{", "}", "from").surround(FormattingOptions.oneSpace);
277
- });
278
- this.on(node, ast.isImported, (n, f) => {
279
- f.keywords(",").prepend(FormattingOptions.noSpace).append(FormattingOptions.oneSpace);
280
- });
281
- }
282
- formatSpecificationRule(node) {
283
- if (ast.isSpecificationElementKind(node) || ast.isSpecificationRelationshipKind(node) || ast.isSpecificationTag(node) || ast.isSpecificationDeploymentNodeKind(node)) {
284
- const formatter = this.getNodeFormatter(node);
285
- formatter.keywords("element", "relationship", "tag", "deploymentNode").append(FormattingOptions.oneSpace);
286
- }
287
- if (ast.isSpecificationColor(node)) {
288
- const formatter = this.getNodeFormatter(node);
289
- formatter.keyword("color").append(FormattingOptions.oneSpace);
290
- formatter.property("name").append(FormattingOptions.oneSpace);
291
- }
292
- }
293
- formatWithPredicate(node) {
294
- if (ast.isFqnExprWith(node) || ast.isRelationExprWith(node)) {
295
- const formatter = this.getNodeFormatter(node);
296
- formatter.keyword("with").prepend(FormattingOptions.oneSpace);
297
- }
298
- }
299
- formatDeploymentNodeDeclaration(node) {
300
- this.on(node, ast.isDeploymentNode, (n, f) => {
301
- const kind = GrammarUtils.findNodeForProperty(n.$cstNode, "kind");
302
- const name = GrammarUtils.findNodeForProperty(n.$cstNode, "name");
303
- if (name && kind) {
304
- if (utils.compareRanges(name, kind) > 0) {
305
- f.cst([kind]).append(FormattingOptions.oneSpace);
306
- } else {
307
- f.cst([name]).append(FormattingOptions.oneSpace);
308
- f.cst([kind]).prepend(FormattingOptions.oneSpace);
309
- }
310
- }
311
- f.properties("title").prepend(FormattingOptions.oneSpace);
312
- });
313
- }
314
- formatDeployedInstance(node) {
315
- this.on(node, ast.isDeployedInstance, (n, f) => {
316
- const eqNode = n.$cstNode?.content.find((c) => c.text === "=");
317
- if (eqNode) {
318
- f.cst([eqNode]).surround(FormattingOptions.oneSpace);
319
- }
320
- f.keyword("instanceOf").append(FormattingOptions.oneSpace);
321
- f.property("title").prepend(FormattingOptions.oneSpace);
322
- });
323
- }
324
- formatViewRuleGlobalStyle(node) {
325
- this.on(node, ast.isViewRuleGlobalStyle, (n, f) => {
326
- f.keywords("global", "style").append(FormattingOptions.oneSpace);
327
- });
328
- }
329
- formatViewRuleGlobalPredicate(node) {
330
- const formatter = this.getNodeFormatter(node);
331
- if (ast.isViewRuleGlobalPredicateRef(node) || ast.isDynamicViewGlobalPredicateRef(node)) {
332
- formatter.keywords("global", "predicate").append(FormattingOptions.oneSpace);
333
- }
334
- }
335
- formatViewRuleGroup(node) {
336
- this.on(node, ast.isViewRuleGroup, (n, f) => {
337
- f.keyword("group").append(FormattingOptions.oneSpace);
338
- });
339
- }
340
- formatViewRuleStyle(node) {
341
- this.on(node, ast.isViewRuleStyle)?.keyword("style").append(FormattingOptions.oneSpace);
342
- this.on(node, ast.isDeploymentViewRuleStyle)?.keyword("style").append(FormattingOptions.oneSpace);
343
- this.on(node, ast.isExpressions)?.keyword(",").prepend(FormattingOptions.noSpace).append(FormattingOptions.oneSpace);
344
- this.on(node, ast.isFqnExpressions)?.keyword(",").prepend(FormattingOptions.noSpace).append(FormattingOptions.oneSpace);
345
- }
346
- formatWhereExpression(node) {
347
- if (ast.isRelationExprWhere(node) || ast.isFqnExprWhere(node)) {
348
- const formatter = this.getNodeFormatter(node);
349
- formatter.keyword("where").append(FormattingOptions.oneSpace);
350
- }
351
- }
352
- formatWhereRelationExpression(node) {
353
- this.on(node, ast.isWhereRelationExpression, (n, f) => {
354
- f.property("operator").surround(FormattingOptions.oneSpace);
355
- });
356
- this.on(node, ast.isWhereRelationNegation, (n, f) => {
357
- f.keyword("not").append(FormattingOptions.oneSpace);
358
- });
359
- if (ast.isWhereRelation(node) || ast.isWhereRelationTag(node) || ast.isWhereRelationKind(node)) {
360
- const formatter = this.getNodeFormatter(node);
361
- formatter.property("operator").surround(FormattingOptions.oneSpace);
362
- formatter.property("not").surround(FormattingOptions.oneSpace);
363
- }
364
- }
365
- formatWhereElementExpression(node) {
366
- this.on(node, ast.isWhereElementExpression, (n, f) => {
367
- f.property("operator").surround(FormattingOptions.oneSpace);
368
- });
369
- this.on(node, ast.isWhereElementNegation, (n, f) => {
370
- f.keyword("not").append(FormattingOptions.oneSpace);
371
- });
372
- if (ast.isWhereElement(node) || ast.isWhereElementTag(node) || ast.isWhereElementKind(node)) {
373
- const formatter = this.getNodeFormatter(node);
374
- formatter.property("operator").surround(FormattingOptions.oneSpace);
375
- formatter.property("not").surround(FormattingOptions.oneSpace);
376
- }
377
- }
378
- formatIncludeExcludeExpressions(node) {
379
- if (ast.isDynamicViewRule(node) || ast.isViewRulePredicate(node) || ast.isDeploymentViewRulePredicate(node)) {
380
- const formatter = this.getNodeFormatter(node);
381
- if (!node.$cstNode || !utils.isMultiline(node.$cstNode)) {
382
- formatter.keywords("include", "exclude").append(FormattingOptions.oneSpace);
383
- }
384
- }
385
- if (ast.isExpressions(node)) {
386
- const formatter = this.getNodeFormatter(node);
387
- const parent = this.findPredicateExpressionRoot(node);
388
- const isMultiline2 = parent?.$cstNode && utils.isMultiline(parent?.$cstNode);
389
- if (isMultiline2) {
390
- formatter.property("value").prepend(FormattingOptions.indent);
391
- }
392
- formatter.keyword(",").prepend(FormattingOptions.noSpace).append(isMultiline2 ? FormattingOptions.newLine : FormattingOptions.oneSpace);
393
- }
394
- }
395
- formatRelationExpression(node) {
396
- this.on(node, ast.isIncomingRelationExpr, (n, f) => {
397
- f.keyword("->").append(FormattingOptions.oneSpace);
398
- });
399
- this.on(node, ast.isInOutRelationExpr, (n, f) => {
400
- f.keyword("->").prepend(FormattingOptions.oneSpace);
401
- });
402
- this.on(node, ast.isOutgoingRelationExpr, (n, f) => {
403
- f.keywords("->", "<->").prepend(FormattingOptions.oneSpace);
404
- f.keywords("-[").prepend(FormattingOptions.oneSpace).append(FormattingOptions.noSpace);
405
- f.keywords("]->").prepend(FormattingOptions.noSpace).append(FormattingOptions.oneSpace);
406
- f.property("dotKind").prepend(FormattingOptions.oneSpace).append(FormattingOptions.oneSpace);
407
- });
408
- this.on(node, ast.isDirectedRelationExpr, (n, f) => {
409
- f.property("target").prepend(FormattingOptions.oneSpace);
410
- });
411
- }
412
- findPredicateExpressionRoot(node) {
413
- let parent = node.$container;
414
- while (true) {
415
- if (!parent || ast.isDynamicViewRule(parent) || ast.isViewRulePredicate(parent) || ast.isDeploymentViewRulePredicate(parent)) {
416
- return parent;
417
- }
418
- parent = parent.$container;
419
- }
420
- }
421
- on(node, predicate, format) {
422
- const formatter = predicate(node) ? this.getNodeFormatter(node) : void 0;
423
- format && formatter && format(node, formatter);
424
- return formatter;
425
- }
426
- doExtendedFormatting(edits) {
427
- const quotesNormalizer = this.quotesNormalizerFactory(this.extendedFormattingCommands);
428
- for (let command of this.extendedFormattingCommands) {
429
- switch (command.type) {
430
- case "normalizeQuotes":
431
- quotesNormalizer(command, edits);
432
- break;
433
- default:
434
- nonexhaustive(command.type);
435
- }
436
- }
437
- }
438
- normalizeQuotes(node) {
439
- if (this.options.quoteStyle === "ignore") {
440
- return;
441
- }
442
- let region = null;
443
- region = region ?? this.on(node, ast.isStringProperty)?.property("value");
444
- region = region ?? this.on(node, ast.isElement)?.properties("props");
445
- region = region ?? this.on(node, ast.isImportsFromPoject)?.properties("project");
446
- region = region ?? this.on(node, ast.isRelation)?.properties("title", "technology");
447
- region = region ?? this.on(node, ast.isViewRuleGroup)?.properties("title");
448
- region = region ?? this.on(node, ast.isDynamicViewStep)?.properties("title");
449
- region = region ?? this.on(node, ast.isDeploymentNode)?.properties("title");
450
- region = region ?? this.on(node, ast.isDeployedInstance)?.properties("title");
451
- region = region ?? this.on(node, ast.isDeploymentRelation)?.properties("title", "technology");
452
- region = region ?? this.on(node, ast.isLinkProperty)?.properties("title");
453
- if (region) {
454
- this.extendedFormattingCommands.push({ type: "normalizeQuotes", region });
455
- }
456
- }
457
- quotesNormalizerFactory(commands) {
458
- const quoteStyle = this.options.quoteStyle != "auto" ? this.options.quoteStyle : this.getAutoQuoteStyle(commands);
459
- return (command, edits) => {
460
- const quotesToReplace = quoteStyle === "single" ? '"' : "'";
461
- const quotesToInsert = quoteStyle === "single" ? "'" : '"';
462
- const markdownFence = quotesToInsert.repeat(3);
463
- const plainFence = quotesToInsert;
464
- const newEdits = command.region.nodes.map((node) => {
465
- const fence = node.text.startsWith(`"""`) || node.text.startsWith(`'''`) ? markdownFence : plainFence;
466
- return {
467
- range: node.range,
468
- newText: fence + this.escapeQuotesInternalQuotes(
469
- node.text.slice(fence.length, -fence.length),
470
- quotesToReplace,
471
- quotesToInsert
472
- ) + fence
473
- };
474
- });
475
- edits.push(...newEdits);
476
- };
477
- }
478
- escapeQuotesInternalQuotes(text, quotesToReplace, quoteToInsert) {
479
- let result = "";
480
- let start = 0;
481
- while (start >= 0) {
482
- let pos = text.indexOf(quoteToInsert, start);
483
- if (pos < 0) {
484
- result += text.slice(start);
485
- break;
486
- }
487
- result += text.slice(start, pos);
488
- start = pos + 1;
489
- let escaped = false;
490
- while (pos > 0 && text[pos - 1] == "\\") {
491
- escaped = !escaped;
492
- pos--;
493
- }
494
- result += escaped ? quoteToInsert : `\\${quoteToInsert}`;
495
- }
496
- return result;
497
- }
498
- getAutoQuoteStyle(commands) {
499
- const nodes = commands.flatMap((x) => x.region.nodes);
500
- const doubleQuotesCount = nodes.filter((x) => x.text[0] == '"').length;
501
- return doubleQuotesCount * 2 >= nodes.length ? "double" : "single";
502
- }
503
- onConfigurationUpdate(options) {
504
- this.options = {
505
- ...this.options,
506
- ...options ?? {
507
- quoteStyle: "auto"
508
- }
509
- };
510
- }
511
- }
@@ -1,15 +0,0 @@
1
- export function areOverlap(a, b) {
2
- ;
3
- [a, b] = compareRanges(a, b) > 0 ? [b, a] : [a, b];
4
- return isInRagne(a.range, b.range.start);
5
- }
6
- export function compareRanges(a, b) {
7
- const lineDiff = a.range.start.line - b.range.start.line;
8
- return lineDiff !== 0 ? lineDiff : a.range.start.character - b.range.start.character;
9
- }
10
- export function isInRagne(range, pos) {
11
- return !(pos.line < range.start.line || pos.line > range.end.line || pos.line == range.start.line && pos.character < range.start.character || pos.line == range.end.line && pos.character > range.end.character);
12
- }
13
- export function isMultiline(node) {
14
- return !!node && node.range.start.line != node.range.end.line;
15
- }