runescript-lsp 0.0.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 (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -0
  3. package/dist/cache/CompletionCache.d.ts +15 -0
  4. package/dist/cache/CompletionCache.js +58 -0
  5. package/dist/cache/CompletionCache.js.map +1 -0
  6. package/dist/cache/FileCache.d.ts +25 -0
  7. package/dist/cache/FileCache.js +101 -0
  8. package/dist/cache/FileCache.js.map +1 -0
  9. package/dist/cache/IdCache.d.ts +28 -0
  10. package/dist/cache/IdCache.js +47 -0
  11. package/dist/cache/IdCache.js.map +1 -0
  12. package/dist/cache/SymbolCache.d.ts +76 -0
  13. package/dist/cache/SymbolCache.js +205 -0
  14. package/dist/cache/SymbolCache.js.map +1 -0
  15. package/dist/cache/Trie.d.ts +22 -0
  16. package/dist/cache/Trie.js +122 -0
  17. package/dist/cache/Trie.js.map +1 -0
  18. package/dist/cache/WorkspaceCache.d.ts +32 -0
  19. package/dist/cache/WorkspaceCache.js +60 -0
  20. package/dist/cache/WorkspaceCache.js.map +1 -0
  21. package/dist/cache/cacheManager.d.ts +16 -0
  22. package/dist/cache/cacheManager.js +47 -0
  23. package/dist/cache/cacheManager.js.map +1 -0
  24. package/dist/handler/colorProvider.d.ts +2 -0
  25. package/dist/handler/colorProvider.js +103 -0
  26. package/dist/handler/colorProvider.js.map +1 -0
  27. package/dist/handler/commands.d.ts +6 -0
  28. package/dist/handler/commands.js +25 -0
  29. package/dist/handler/commands.js.map +1 -0
  30. package/dist/handler/completion.d.ts +3 -0
  31. package/dist/handler/completion.js +25 -0
  32. package/dist/handler/completion.js.map +1 -0
  33. package/dist/handler/definition.d.ts +2 -0
  34. package/dist/handler/definition.js +20 -0
  35. package/dist/handler/definition.js.map +1 -0
  36. package/dist/handler/fileEvents.d.ts +3 -0
  37. package/dist/handler/fileEvents.js +107 -0
  38. package/dist/handler/fileEvents.js.map +1 -0
  39. package/dist/handler/gitEvents.d.ts +6 -0
  40. package/dist/handler/gitEvents.js +22 -0
  41. package/dist/handler/gitEvents.js.map +1 -0
  42. package/dist/handler/hover.d.ts +2 -0
  43. package/dist/handler/hover.js +125 -0
  44. package/dist/handler/hover.js.map +1 -0
  45. package/dist/handler/references.d.ts +2 -0
  46. package/dist/handler/references.js +33 -0
  47. package/dist/handler/references.js.map +1 -0
  48. package/dist/handler/rename.d.ts +2 -0
  49. package/dist/handler/rename.js +6 -0
  50. package/dist/handler/rename.js.map +1 -0
  51. package/dist/handler/semanticTokens.d.ts +4 -0
  52. package/dist/handler/semanticTokens.js +40 -0
  53. package/dist/handler/semanticTokens.js.map +1 -0
  54. package/dist/handler/settingsEvents.d.ts +2 -0
  55. package/dist/handler/settingsEvents.js +11 -0
  56. package/dist/handler/settingsEvents.js.map +1 -0
  57. package/dist/handler/signatureHelp.d.ts +2 -0
  58. package/dist/handler/signatureHelp.js +6 -0
  59. package/dist/handler/signatureHelp.js.map +1 -0
  60. package/dist/handler/workspaceEvents.d.ts +2 -0
  61. package/dist/handler/workspaceEvents.js +30 -0
  62. package/dist/handler/workspaceEvents.js.map +1 -0
  63. package/dist/manager.d.ts +6 -0
  64. package/dist/manager.js +126 -0
  65. package/dist/manager.js.map +1 -0
  66. package/dist/parser/configParser.d.ts +29 -0
  67. package/dist/parser/configParser.js +216 -0
  68. package/dist/parser/configParser.js.map +1 -0
  69. package/dist/parser/constantParser.d.ts +14 -0
  70. package/dist/parser/constantParser.js +40 -0
  71. package/dist/parser/constantParser.js.map +1 -0
  72. package/dist/parser/dbtableParser.d.ts +18 -0
  73. package/dist/parser/dbtableParser.js +114 -0
  74. package/dist/parser/dbtableParser.js.map +1 -0
  75. package/dist/parser/packParser.d.ts +11 -0
  76. package/dist/parser/packParser.js +13 -0
  77. package/dist/parser/packParser.js.map +1 -0
  78. package/dist/parser/parser.d.ts +44 -0
  79. package/dist/parser/parser.js +34 -0
  80. package/dist/parser/parser.js.map +1 -0
  81. package/dist/parser/runescriptParser.d.ts +13 -0
  82. package/dist/parser/runescriptParser.js +28 -0
  83. package/dist/parser/runescriptParser.js.map +1 -0
  84. package/dist/public/commands.d.ts +1 -0
  85. package/dist/public/commands.js +2 -0
  86. package/dist/public/commands.js.map +1 -0
  87. package/dist/public/settings.d.ts +2 -0
  88. package/dist/public/settings.js +2 -0
  89. package/dist/public/settings.js.map +1 -0
  90. package/dist/public/types.d.ts +2 -0
  91. package/dist/public/types.js +2 -0
  92. package/dist/public/types.js.map +1 -0
  93. package/dist/resolver/configResolver.d.ts +2 -0
  94. package/dist/resolver/configResolver.js +102 -0
  95. package/dist/resolver/configResolver.js.map +1 -0
  96. package/dist/resolver/constantResolver.d.ts +2 -0
  97. package/dist/resolver/constantResolver.js +37 -0
  98. package/dist/resolver/constantResolver.js.map +1 -0
  99. package/dist/resolver/dbtableResolver.d.ts +2 -0
  100. package/dist/resolver/dbtableResolver.js +28 -0
  101. package/dist/resolver/dbtableResolver.js.map +1 -0
  102. package/dist/resolver/packResolver.d.ts +2 -0
  103. package/dist/resolver/packResolver.js +32 -0
  104. package/dist/resolver/packResolver.js.map +1 -0
  105. package/dist/resolver/resolver.d.ts +15 -0
  106. package/dist/resolver/resolver.js +95 -0
  107. package/dist/resolver/resolver.js.map +1 -0
  108. package/dist/resolver/runescriptResolver.d.ts +2 -0
  109. package/dist/resolver/runescriptResolver.js +347 -0
  110. package/dist/resolver/runescriptResolver.js.map +1 -0
  111. package/dist/resource/configKeys.d.ts +21 -0
  112. package/dist/resource/configKeys.js +86 -0
  113. package/dist/resource/configKeys.js.map +1 -0
  114. package/dist/resource/enum/displayItems.d.ts +13 -0
  115. package/dist/resource/enum/displayItems.js +23 -0
  116. package/dist/resource/enum/displayItems.js.map +1 -0
  117. package/dist/resource/enum/fileTypes.d.ts +26 -0
  118. package/dist/resource/enum/fileTypes.js +28 -0
  119. package/dist/resource/enum/fileTypes.js.map +1 -0
  120. package/dist/resource/enum/languages.d.ts +25 -0
  121. package/dist/resource/enum/languages.js +27 -0
  122. package/dist/resource/enum/languages.js.map +1 -0
  123. package/dist/resource/enum/regex.d.ts +24 -0
  124. package/dist/resource/enum/regex.js +25 -0
  125. package/dist/resource/enum/regex.js.map +1 -0
  126. package/dist/resource/enum/semanticTokens.d.ts +24 -0
  127. package/dist/resource/enum/semanticTokens.js +26 -0
  128. package/dist/resource/enum/semanticTokens.js.map +1 -0
  129. package/dist/resource/enum/symbolTypes.d.ts +49 -0
  130. package/dist/resource/enum/symbolTypes.js +51 -0
  131. package/dist/resource/enum/symbolTypes.js.map +1 -0
  132. package/dist/resource/enum/types.d.ts +47 -0
  133. package/dist/resource/enum/types.js +49 -0
  134. package/dist/resource/enum/types.js.map +1 -0
  135. package/dist/resource/scriptTriggers.d.ts +8 -0
  136. package/dist/resource/scriptTriggers.js +72 -0
  137. package/dist/resource/scriptTriggers.js.map +1 -0
  138. package/dist/resource/symbolConfig.d.ts +10 -0
  139. package/dist/resource/symbolConfig.js +234 -0
  140. package/dist/resource/symbolConfig.js.map +1 -0
  141. package/dist/resource/symbolPostProcessors.d.ts +15 -0
  142. package/dist/resource/symbolPostProcessors.js +70 -0
  143. package/dist/resource/symbolPostProcessors.js.map +1 -0
  144. package/dist/server.d.ts +1 -0
  145. package/dist/server.js +110 -0
  146. package/dist/server.js.map +1 -0
  147. package/dist/types.d.ts +214 -0
  148. package/dist/types.js +6 -0
  149. package/dist/types.js.map +1 -0
  150. package/dist/utils/cacheUtils.d.ts +12 -0
  151. package/dist/utils/cacheUtils.js +26 -0
  152. package/dist/utils/cacheUtils.js.map +1 -0
  153. package/dist/utils/connectionUtils.d.ts +3 -0
  154. package/dist/utils/connectionUtils.js +8 -0
  155. package/dist/utils/connectionUtils.js.map +1 -0
  156. package/dist/utils/diagnosticsUtils.d.ts +4 -0
  157. package/dist/utils/diagnosticsUtils.js +11 -0
  158. package/dist/utils/diagnosticsUtils.js.map +1 -0
  159. package/dist/utils/documentUtils.d.ts +5 -0
  160. package/dist/utils/documentUtils.js +14 -0
  161. package/dist/utils/documentUtils.js.map +1 -0
  162. package/dist/utils/fileUtils.d.ts +42 -0
  163. package/dist/utils/fileUtils.js +82 -0
  164. package/dist/utils/fileUtils.js.map +1 -0
  165. package/dist/utils/handlerUtils.d.ts +1 -0
  166. package/dist/utils/handlerUtils.js +5 -0
  167. package/dist/utils/handlerUtils.js.map +1 -0
  168. package/dist/utils/highlightUtils.d.ts +7 -0
  169. package/dist/utils/highlightUtils.js +52 -0
  170. package/dist/utils/highlightUtils.js.map +1 -0
  171. package/dist/utils/initUtils.d.ts +3 -0
  172. package/dist/utils/initUtils.js +18 -0
  173. package/dist/utils/initUtils.js.map +1 -0
  174. package/dist/utils/logger.d.ts +11 -0
  175. package/dist/utils/logger.js +38 -0
  176. package/dist/utils/logger.js.map +1 -0
  177. package/dist/utils/progressUtils.d.ts +7 -0
  178. package/dist/utils/progressUtils.js +31 -0
  179. package/dist/utils/progressUtils.js.map +1 -0
  180. package/dist/utils/resolverUtils.d.ts +17 -0
  181. package/dist/utils/resolverUtils.js +97 -0
  182. package/dist/utils/resolverUtils.js.map +1 -0
  183. package/dist/utils/settingsUtils.d.ts +19 -0
  184. package/dist/utils/settingsUtils.js +88 -0
  185. package/dist/utils/settingsUtils.js.map +1 -0
  186. package/dist/utils/symbolBuilder.d.ts +10 -0
  187. package/dist/utils/symbolBuilder.js +135 -0
  188. package/dist/utils/symbolBuilder.js.map +1 -0
  189. package/dist/utils/workspaceUtils.d.ts +11 -0
  190. package/dist/utils/workspaceUtils.js +52 -0
  191. package/dist/utils/workspaceUtils.js.map +1 -0
  192. package/package.json +51 -0
@@ -0,0 +1,31 @@
1
+ let connection;
2
+ export function initProgress(conn) {
3
+ connection = conn;
4
+ }
5
+ export async function startProgress(title, message, percentage = 0, cancellable = false) {
6
+ if (!connection) {
7
+ throw new Error("progressUtils not initialized. Call initProgress(connection) first.");
8
+ }
9
+ const progress = await connection.window.createWorkDoneProgress();
10
+ progress.begin(title, percentage, message, cancellable);
11
+ return wrapProgress(progress);
12
+ }
13
+ function wrapProgress(progress) {
14
+ return {
15
+ report: (percentageOrMessage, message) => {
16
+ if (typeof percentageOrMessage === "number") {
17
+ if (message !== undefined) {
18
+ progress.report(percentageOrMessage, message);
19
+ return;
20
+ }
21
+ progress.report(percentageOrMessage);
22
+ return;
23
+ }
24
+ if (typeof percentageOrMessage === "string") {
25
+ progress.report(percentageOrMessage);
26
+ }
27
+ },
28
+ done: () => progress.done(),
29
+ };
30
+ }
31
+ //# sourceMappingURL=progressUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressUtils.js","sourceRoot":"","sources":["../../src/utils/progressUtils.ts"],"names":[],"mappings":"AAOA,IAAI,UAAkC,CAAC;AAEvC,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,UAAU,GAAG,IAAI,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,OAAgB,EAAE,UAAU,GAAG,CAAC,EAAE,WAAW,GAAG,KAAK;IACtG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;IAClE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACxD,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,YAAY,CAAC,QAAkC;IACtD,OAAO;QACL,MAAM,EAAE,CAAC,mBAAqC,EAAE,OAAgB,EAAE,EAAE;YAClE,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE,CAAC;gBAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;oBAC9C,OAAO;gBACT,CAAC;gBACD,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YACD,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE,CAAC;gBAC5C,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE;KAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Location, Position, Range } from "vscode-languageserver";
2
+ import { SymbolType } from "../resource/enum/symbolTypes.js";
3
+ import { DataRange, FileInfo, ResolvedData, ResolvedSymbol, RunescriptSymbol } from "../types.js";
4
+ /**
5
+ * Binary search to find the match of a data range list at the index provided, if there is one
6
+ * @param index Index of the item you are looking for
7
+ * @param items List of the DataRanges which hold the data being retrieved
8
+ * @returns The data of the DataRange, if a match is found
9
+ */
10
+ export declare function findMatchInRange<T>(index: number, items?: DataRange<T>[]): DataRange<T> | undefined;
11
+ export declare function buildLocation(start: number, end: number, line: number, uri: string): Location;
12
+ export declare function buildRange(start: number, end: number, line: number): Range;
13
+ export declare function buildPosition(index: number, line: number): Position;
14
+ export declare function resolveAtHandlerPosition(position: Position, fileInfo: FileInfo): DataRange<ResolvedSymbol> | undefined;
15
+ export declare function resolveRefDataRange(symbolType: SymbolType, start: number, end: number, line: number, name: string, fileType: string, context?: Record<string, any>, extraData?: Record<string, any>): DataRange<ResolvedData>;
16
+ export declare function resolveDefDataRange(start: number, end: number, line: number, symbol: RunescriptSymbol, declaration: boolean, context?: Record<string, any>): DataRange<ResolvedData>;
17
+ export declare function toCoord(n: number): string;
@@ -0,0 +1,97 @@
1
+ import { Location, Position, Range } from "vscode-languageserver";
2
+ import { getSymbolConfig } from "../resource/symbolConfig.js";
3
+ import { buildSymbolFromRef } from "./symbolBuilder.js";
4
+ import { getFileCache } from "../cache/cacheManager.js";
5
+ /**
6
+ * Binary search to find the match of a data range list at the index provided, if there is one
7
+ * @param index Index of the item you are looking for
8
+ * @param items List of the DataRanges which hold the data being retrieved
9
+ * @returns The data of the DataRange, if a match is found
10
+ */
11
+ export function findMatchInRange(index, items) {
12
+ if (!items)
13
+ return undefined;
14
+ let lo = 0;
15
+ let hi = items.length - 1;
16
+ while (lo <= hi) {
17
+ const mid = (lo + hi) >> 1;
18
+ const item = items[mid];
19
+ if (index < item.start)
20
+ hi = mid - 1;
21
+ else if (index > item.end)
22
+ lo = mid + 1;
23
+ else
24
+ return item;
25
+ }
26
+ return undefined;
27
+ }
28
+ export function buildLocation(start, end, line, uri) {
29
+ return Location.create(uri, buildRange(start, end, line));
30
+ }
31
+ export function buildRange(start, end, line) {
32
+ return Range.create(buildPosition(start, line), buildPosition(end, line));
33
+ }
34
+ export function buildPosition(index, line) {
35
+ return Position.create(line, index);
36
+ }
37
+ export function resolveAtHandlerPosition(position, fileInfo) {
38
+ const fileCache = getFileCache(fileInfo.workspace, fileInfo.fsPath);
39
+ if (!fileCache)
40
+ return undefined;
41
+ const resolvedDataRange = fileCache.getAtPosition(position);
42
+ if (!resolvedDataRange)
43
+ return undefined;
44
+ return resolvedDataRange;
45
+ }
46
+ export function resolveRefDataRange(symbolType, start, end, line, name, fileType, context, extraData) {
47
+ const symbolConfig = getSymbolConfig(symbolType);
48
+ if (symbolConfig.cache) {
49
+ return dataRangeFromRef(start, end, line, symbolConfig, name, context, extraData);
50
+ }
51
+ else {
52
+ return dataRangeFromSymbol(start, end, line, buildSymbolFromRef(name, symbolType, fileType, extraData), false, context);
53
+ }
54
+ }
55
+ export function resolveDefDataRange(start, end, line, symbol, declaration, context) {
56
+ return dataRangeFromSymbol(start, end, line, symbol, declaration, context);
57
+ }
58
+ function dataRangeFromRef(start, end, line, symbolConfig, name, context, extraData) {
59
+ return {
60
+ start,
61
+ end,
62
+ data: {
63
+ declaration: false,
64
+ symbolConfig,
65
+ line,
66
+ name,
67
+ id: context?.id,
68
+ context,
69
+ extraData
70
+ }
71
+ };
72
+ }
73
+ function dataRangeFromSymbol(start, end, line, symbol, declaration, context) {
74
+ return {
75
+ start,
76
+ end,
77
+ data: {
78
+ declaration,
79
+ symbolConfig: getSymbolConfig(symbol.symbolType),
80
+ line,
81
+ symbol,
82
+ context
83
+ }
84
+ };
85
+ }
86
+ export function toCoord(n) {
87
+ const level = n >>> 28;
88
+ const x = (n >>> 14) & 0x3fff;
89
+ const y = n & 0x3fff;
90
+ const chunkX = x >>> 6;
91
+ const chunkY = y >>> 6;
92
+ const localX = x & 0x3f;
93
+ const localY = y & 0x3f;
94
+ return `${level}_${chunkX}_${chunkY}_${localX}_${localY}`;
95
+ }
96
+ ;
97
+ //# sourceMappingURL=resolverUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolverUtils.js","sourceRoot":"","sources":["../../src/utils/resolverUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAI,KAAa,EAAE,KAAsB;IACvE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;YAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;aAChC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG;YAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;;YACnC,OAAO,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,GAAW,EAAE,IAAY,EAAE,GAAW;IACjF,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,GAAW,EAAE,IAAY;IACjE,OAAO,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,IAAY;IACvD,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAkB,EAAE,QAAkB;IAC7E,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,iBAAiB,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,CAAC,iBAAiB;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAsB,EAAE,KAAa,EAAE,GAAW,EAAE,IAAY,EAAE,IAAY,EAAE,QAAgB,EAAE,OAA6B,EAAE,SAA+B;IAClM,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,OAAO,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1H,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,GAAW,EAAE,IAAY,EAAE,MAAwB,EAAE,WAAoB,EAAE,OAA6B;IACzJ,OAAO,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC;AAGD,SAAS,gBAAgB,CAAC,KAAa,EAAE,GAAW,EAAE,IAAY,EAAE,YAA0B,EAAE,IAAY,EAAE,OAA6B,EAAE,SAA+B;IAC1K,OAAO;QACL,KAAK;QACL,GAAG;QACH,IAAI,EAAE;YACJ,WAAW,EAAE,KAAK;YAClB,YAAY;YACZ,IAAI;YACJ,IAAI;YACJ,EAAE,EAAE,OAAO,EAAE,EAAE;YACf,OAAO;YACP,SAAS;SACV;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa,EAAE,GAAW,EAAE,IAAY,EAAE,MAAwB,EAAE,WAAoB,EAAE,OAA6B;IAClJ,OAAO;QACL,KAAK;QACL,GAAG;QACH,IAAI,EAAE;YACJ,WAAW;YACX,YAAY,EAAE,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC;YAChD,IAAI;YACJ,MAAM;YACN,OAAO;SACR;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;IACvB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;IAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACrB,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;IACxB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;IACxB,OAAO,GAAG,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAC5D,CAAC;AAAA,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Connection, DidChangeConfigurationParams } from "vscode-languageserver/node.js";
2
+ export interface Settings {
3
+ enableDiagnostics: boolean;
4
+ enableHover: boolean;
5
+ enableDevMode: boolean;
6
+ }
7
+ export declare const SETTINGS_SECTION = "runescript";
8
+ export declare const SETTINGS_KEYS: {
9
+ readonly ENABLE_DIAGNOSTICS: "runescript.enableDiagnostics";
10
+ readonly ENABLE_HOVER: "runescript.enableHover";
11
+ readonly ENABLE_DEV_MODE: "runescript.enableDevMode";
12
+ };
13
+ export declare function getSettings(): Settings;
14
+ export declare function setSettings(next: Settings): void;
15
+ export declare function isHoverEnabled(): boolean;
16
+ export declare function isDiagnosticsEnabled(): boolean;
17
+ export declare function isDevMode(): boolean;
18
+ export declare function initSettings(connection: Connection): Promise<void>;
19
+ export declare function handleSettingsChange(change: DidChangeConfigurationParams): void;
@@ -0,0 +1,88 @@
1
+ import { logSettingsChange } from "./logger.js";
2
+ import { rebuildAllWorkspaces } from "../manager.js";
3
+ import { clearAllHighlights } from "./highlightUtils.js";
4
+ export const SETTINGS_SECTION = "runescript";
5
+ export const SETTINGS_KEYS = {
6
+ ENABLE_DIAGNOSTICS: "runescript.enableDiagnostics",
7
+ ENABLE_HOVER: "runescript.enableHover",
8
+ ENABLE_DEV_MODE: "runescript.enableDevMode"
9
+ };
10
+ const defaultSettings = {
11
+ enableDiagnostics: true,
12
+ enableHover: true,
13
+ enableDevMode: false
14
+ };
15
+ let currentSettings = { ...defaultSettings };
16
+ export function getSettings() {
17
+ return currentSettings;
18
+ }
19
+ export function setSettings(next) {
20
+ currentSettings = next;
21
+ }
22
+ export function isHoverEnabled() {
23
+ return currentSettings.enableHover ?? false;
24
+ }
25
+ export function isDiagnosticsEnabled() {
26
+ return currentSettings.enableDiagnostics ?? false;
27
+ }
28
+ export function isDevMode() {
29
+ return currentSettings.enableDevMode ?? false;
30
+ }
31
+ export async function initSettings(connection) {
32
+ const result = await connection.workspace.getConfiguration({ section: SETTINGS_SECTION });
33
+ if (result && typeof result === "object") {
34
+ const partial = result;
35
+ currentSettings = {
36
+ ...defaultSettings,
37
+ enableDiagnostics: typeof partial.enableDiagnostics === "boolean" ? partial.enableDiagnostics : defaultSettings.enableDiagnostics,
38
+ enableHover: typeof partial.enableHover === "boolean" ? partial.enableHover : defaultSettings.enableHover,
39
+ enableDevMode: typeof partial.enableDevMode === "boolean" ? partial.enableDevMode : defaultSettings.enableDevMode
40
+ };
41
+ }
42
+ else {
43
+ currentSettings = { ...defaultSettings };
44
+ }
45
+ }
46
+ export function handleSettingsChange(change) {
47
+ const prevSettings = currentSettings;
48
+ if (change.settings && typeof change.settings === "object") {
49
+ const next = change.settings.runescript;
50
+ if (next && typeof next === "object") {
51
+ const partial = next;
52
+ currentSettings = {
53
+ ...defaultSettings,
54
+ enableDiagnostics: typeof partial.enableDiagnostics === "boolean" ? partial.enableDiagnostics : defaultSettings.enableDiagnostics,
55
+ enableHover: typeof partial.enableHover === "boolean" ? partial.enableHover : defaultSettings.enableHover,
56
+ enableDevMode: typeof partial.enableDevMode === "boolean" ? partial.enableDevMode : defaultSettings.enableDevMode
57
+ };
58
+ }
59
+ }
60
+ diagnosticsToggled(prevSettings.enableDiagnostics, currentSettings.enableDiagnostics);
61
+ hoverToggled(prevSettings.enableHover, currentSettings.enableHover);
62
+ devModeToggled(prevSettings.enableDevMode, currentSettings.enableDevMode);
63
+ }
64
+ function diagnosticsToggled(prevValue, newValue) {
65
+ const changed = prevValue != newValue;
66
+ if (changed) {
67
+ logSettingsChange('enableDiagnostics', newValue);
68
+ }
69
+ }
70
+ function hoverToggled(prevValue, newValue) {
71
+ const changed = prevValue != newValue;
72
+ if (changed) {
73
+ logSettingsChange('enableHover', newValue);
74
+ }
75
+ }
76
+ function devModeToggled(prevValue, newValue) {
77
+ const changed = prevValue != newValue;
78
+ if (changed) {
79
+ logSettingsChange('enableDevMode', newValue);
80
+ if (newValue) {
81
+ rebuildAllWorkspaces();
82
+ }
83
+ else {
84
+ clearAllHighlights();
85
+ }
86
+ }
87
+ }
88
+ //# sourceMappingURL=settingsUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsUtils.js","sourceRoot":"","sources":["../../src/utils/settingsUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { SymbolType } from "../resource/enum/symbolTypes.js";
2
+ import { FileInfo, RunescriptSymbol, Signature, SymbolBuilderExtraItems } from "../types.js";
3
+ export declare function buildSymbolFromDec(name: string, symbolType: SymbolType, fileInfo: FileInfo, lineNum: number, startIndex: number, endIndex: number, extraItems?: SymbolBuilderExtraItems): RunescriptSymbol;
4
+ export declare function buildSymbolFromRef(name: string, symbolType: SymbolType, fileType: string, extraData?: Record<string, any>): RunescriptSymbol;
5
+ export declare function addReference(symbol: RunescriptSymbol, fileKey: string, lineNum: number, startIndex: number, endIndex: number, id?: string): Set<string>;
6
+ export declare function getInfo(line?: string): string | undefined;
7
+ export declare function buildSignature(line: string): Signature;
8
+ export declare function buildModifiedWordContext(original: string, prefix?: string, suffix?: string): {
9
+ modifiedWord: any;
10
+ };
@@ -0,0 +1,135 @@
1
+ import { getDisplayLanguage } from "../resource/enum/displayItems.js";
2
+ import { INFO_MATCHER_REGEX } from "../resource/enum/regex.js";
3
+ import { getSymbolConfig, typeToSymbolType } from "../resource/symbolConfig.js";
4
+ import { encodeReference } from "./cacheUtils.js";
5
+ import { warn } from "./logger.js";
6
+ export function buildSymbolFromDec(name, symbolType, fileInfo, lineNum, startIndex, endIndex, extraItems) {
7
+ const symbol = {
8
+ name,
9
+ symbolType,
10
+ fileType: fileInfo.type,
11
+ language: getDisplayLanguage(symbolType),
12
+ declaration: { fsPath: fileInfo.fsPath, ref: encodeReference(lineNum, startIndex, endIndex) },
13
+ references: {}
14
+ };
15
+ const symbolConfig = getSymbolConfig(symbolType);
16
+ if (symbolConfig.cache) {
17
+ symbol.cacheName = name;
18
+ }
19
+ if (symbolConfig.qualifiedName) {
20
+ if (name.indexOf(':') === -1)
21
+ warn(`Expected qualified name for ${symbolType}, line=${lineNum}, start=${startIndex}, file=${fileInfo.fsPath}`);
22
+ else {
23
+ const split = name.split(':');
24
+ symbol.name = split[1];
25
+ symbol.qualifier = split[0];
26
+ }
27
+ }
28
+ if (extraItems) {
29
+ if (extraItems.extraData)
30
+ symbol.extraData = extraItems.extraData;
31
+ if (extraItems.info)
32
+ symbol.info = extraItems.info;
33
+ if (extraItems.signature)
34
+ symbol.signature = extraItems.signature;
35
+ if ((extraItems.configLines?.size ?? 0) > 0) {
36
+ symbol.configLines = extraItems.configLines;
37
+ const blockInclusionLines = [];
38
+ extraItems.configLines.forEach((lines, key) => {
39
+ lines.forEach(value => blockInclusionLines.push(`${key}=${value}`));
40
+ });
41
+ symbol.block = blockInclusionLines.join('\n');
42
+ }
43
+ }
44
+ if (symbolConfig.postProcessor !== undefined) {
45
+ symbolConfig.postProcessor(symbol);
46
+ }
47
+ cleanupSymbol(symbol);
48
+ return symbol;
49
+ }
50
+ export function buildSymbolFromRef(name, symbolType, fileType, extraData) {
51
+ const symbol = {
52
+ name,
53
+ symbolType,
54
+ fileType,
55
+ language: getDisplayLanguage(symbolType),
56
+ references: {}
57
+ };
58
+ const symbolConfig = getSymbolConfig(symbolType);
59
+ if (symbolConfig.qualifiedName) {
60
+ if (name.indexOf(':') === -1) {
61
+ warn(`Expected qualified name for ${symbolType}, name=${name}`);
62
+ }
63
+ else {
64
+ const split = name.split(':');
65
+ symbol.name = split[1];
66
+ symbol.qualifier = split[0];
67
+ }
68
+ }
69
+ if (extraData)
70
+ symbol.extraData = extraData;
71
+ if (symbolConfig.postProcessor !== undefined && (symbolConfig.referenceOnly || !symbolConfig.cache)) {
72
+ symbolConfig.postProcessor(symbol);
73
+ }
74
+ cleanupSymbol(symbol);
75
+ return symbol;
76
+ }
77
+ export function addReference(symbol, fileKey, lineNum, startIndex, endIndex, id) {
78
+ const fileReferences = symbol.references[fileKey] || new Set();
79
+ fileReferences.add(encodeReference(lineNum, startIndex, endIndex));
80
+ if (id)
81
+ symbol.id = id;
82
+ symbol.references[fileKey] = fileReferences;
83
+ return fileReferences;
84
+ }
85
+ function cleanupSymbol(symbol) {
86
+ delete symbol.configLines;
87
+ }
88
+ export function getInfo(line) {
89
+ if (!line)
90
+ return undefined;
91
+ const infoMatch = INFO_MATCHER_REGEX.exec(line);
92
+ if (infoMatch && infoMatch[2]) {
93
+ return infoMatch[2].trim();
94
+ }
95
+ }
96
+ export function buildSignature(line) {
97
+ // Parse input params
98
+ const params = [];
99
+ let openingIndex = line.indexOf('(');
100
+ let closingIndex = line.indexOf(')');
101
+ if (openingIndex >= 0 && closingIndex >= 0 && ++openingIndex !== closingIndex) {
102
+ line.substring(openingIndex, closingIndex).split(',').forEach(param => {
103
+ if (param.startsWith(' '))
104
+ param = param.substring(1);
105
+ const split = param.split(' ');
106
+ if (split.length === 2) {
107
+ params.push({ type: split[0], name: split[1], symbolType: typeToSymbolType(split[0]) });
108
+ }
109
+ });
110
+ }
111
+ // Parse response type
112
+ let returns = [];
113
+ line = line.substring(closingIndex + 1);
114
+ openingIndex = line.indexOf('(');
115
+ closingIndex = line.indexOf(')');
116
+ if (openingIndex >= 0 && closingIndex >= 0 && ++openingIndex !== closingIndex) {
117
+ returns = line.substring(openingIndex, closingIndex).split(',').map(t => t.trim()).map(t => ({ type: t, symbolType: typeToSymbolType(t) }));
118
+ }
119
+ // Build signature object
120
+ return {
121
+ params,
122
+ returns,
123
+ getParamsDisplayText: () => params.map(param => `${param.type} ${param.name}`).join(', '),
124
+ getReturnsDisplayText: () => returns.map(returnToken => returnToken.type).join(', ')
125
+ };
126
+ }
127
+ export function buildModifiedWordContext(original, prefix, suffix) {
128
+ const modifiedWordContext = { originalWord: original };
129
+ if (prefix)
130
+ modifiedWordContext.originalPrefix = prefix;
131
+ if (suffix)
132
+ modifiedWordContext.originalSuffix = suffix;
133
+ return { modifiedWord: modifiedWordContext };
134
+ }
135
+ //# sourceMappingURL=symbolBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolBuilder.js","sourceRoot":"","sources":["../../src/utils/symbolBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { WorkspaceFolder } from "vscode-languageserver/node.js";
2
+ import { FileInfo } from "../types.js";
3
+ export declare function setWorkspaceFolders(folders: WorkspaceFolder[]): void;
4
+ export declare function getWorkspaceFolders(): string[];
5
+ /**
6
+ * Return the workspace folder (as resolved fsPath)
7
+ * @param fsPath The mapped fsPath (should go thru fileUtils.mapUri() before calling this function)
8
+ * @returns The matching workspace folder, if any
9
+ */
10
+ export declare function findWorkspaceFolder(fsPath: string): string | undefined;
11
+ export declare function getMonitoredWorkspaceFiles(workspace: string): Promise<FileInfo[]>;
@@ -0,0 +1,52 @@
1
+ import path from "path";
2
+ import { fsPathToFileInfo, mapUri, monitoredFileTypes } from "./fileUtils.js";
3
+ import { readdir } from "fs/promises";
4
+ let workspaceFolders = [];
5
+ export function setWorkspaceFolders(folders) {
6
+ workspaceFolders = folders.map((folder) => mapUri(folder.uri));
7
+ }
8
+ export function getWorkspaceFolders() {
9
+ return workspaceFolders;
10
+ }
11
+ /**
12
+ * Return the workspace folder (as resolved fsPath)
13
+ * @param fsPath The mapped fsPath (should go thru fileUtils.mapUri() before calling this function)
14
+ * @returns The matching workspace folder, if any
15
+ */
16
+ export function findWorkspaceFolder(fsPath) {
17
+ let best;
18
+ let bestLength = -1;
19
+ for (const folderPath of workspaceFolders) {
20
+ if (fsPath === folderPath || fsPath.startsWith(folderPath + path.sep)) {
21
+ if (folderPath.length > bestLength) {
22
+ best = folderPath;
23
+ bestLength = folderPath.length;
24
+ }
25
+ }
26
+ }
27
+ return best;
28
+ }
29
+ export async function getMonitoredWorkspaceFiles(workspace) {
30
+ const skipDirs = new Set(['node_modules', '.git', '.vscode', '.idea']); //'maps', 'models', 'songs', 'synth'
31
+ const stack = [workspace];
32
+ const results = [];
33
+ while (stack.length > 0) {
34
+ const dir = stack.pop();
35
+ const entries = await readdir(dir, { withFileTypes: true });
36
+ for (const entry of entries) {
37
+ if (entry.isDirectory()) {
38
+ if (!skipDirs.has(entry.name)) {
39
+ stack.push(path.join(dir, entry.name));
40
+ }
41
+ }
42
+ else if (entry.isFile()) {
43
+ const ext = path.extname(entry.name).slice(1);
44
+ if (monitoredFileTypes.has(ext)) {
45
+ results.push(path.join(dir, entry.name));
46
+ }
47
+ }
48
+ }
49
+ }
50
+ return results.map(fsPathToFileInfo);
51
+ }
52
+ //# sourceMappingURL=workspaceUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaceUtils.js","sourceRoot":"","sources":["../../src/utils/workspaceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,IAAI,gBAAgB,GAAa,EAAE,CAAC;AAEpC,MAAM,UAAU,mBAAmB,CAAC,OAA0B;IAC5D,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,IAAI,IAAwB,CAAC;IAC7B,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;IAEpB,KAAK,MAAM,UAAU,IAAI,gBAAgB,EAAE,CAAC;QAC1C,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACtE,IAAI,UAAU,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;gBACnC,IAAI,GAAG,UAAU,CAAC;gBAClB,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,SAAiB;IAChE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA,CAAC,oCAAoC;IAC3G,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACzB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAa,CAAC;gBAC1D,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACvC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "runescript-lsp",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "description": "Language Server Protocol implementation for Runescript",
6
+ "main": "dist/server.js",
7
+ "types": "dist/server.d.ts",
8
+ "scripts": {
9
+ "clean": "rimraf dist",
10
+ "build": "npm run clean && tsc -p tsconfig.json",
11
+ "dev": "tsc -p tsconfig.json --watch",
12
+ "start": "node dist/server.js",
13
+ "lint": "eslint .",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "exports": {
22
+ ".": "./dist/server.js",
23
+ "./commands": {
24
+ "types": "./dist/public/commands.d.ts",
25
+ "default": "./dist/public/commands.js"
26
+ },
27
+ "./settings": {
28
+ "types": "./dist/public/settings.d.ts",
29
+ "default": "./dist/public/settings.js"
30
+ },
31
+ "./types": {
32
+ "types": "./dist/public/types.d.ts",
33
+ "default": "./dist/public/types.js"
34
+ }
35
+ },
36
+ "dependencies": {
37
+ "runescript-parser": "^0.1.5",
38
+ "vscode-uri": "^3.0.8",
39
+ "vscode-languageserver": "^9.0.1",
40
+ "vscode-languageserver-textdocument": "^1.0.11"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^22.13.5",
44
+ "eslint": "^9.19.0",
45
+ "rimraf": "^6.0.1",
46
+ "typescript": "^5.7.3"
47
+ },
48
+ "engines": {
49
+ "node": ">=20"
50
+ }
51
+ }