@algorandfoundation/puya-ts 1.2.0-beta.2 → 1.2.0-beta.21
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.
- package/README.md +7 -5
- package/{analyser-service-DSK9g7zQ.js → analyser-service-CGprVWba.js} +409 -372
- package/analyser-service-CGprVWba.js.map +1 -0
- package/analyserService.mjs +7 -6
- package/analyserService.mjs.map +1 -1
- package/arc4-clientgen-C7FQSt3R.js +324 -0
- package/arc4-clientgen-C7FQSt3R.js.map +1 -0
- package/arc4-clientgen.d.ts +6 -0
- package/awst/intrinsic-factory.d.ts +4 -2
- package/awst/node-factory.d.ts +1 -0
- package/awst/nodes.d.ts +22 -2
- package/awst/to-code-visitor.d.ts +2 -0
- package/awst/validation/awst-traverser.d.ts +3 -1
- package/awst/wtypes.d.ts +8 -1
- package/awst_build/arc4-util.d.ts +1 -38
- package/awst_build/ast-visitors/contract-method-visitor.d.ts +0 -2
- package/awst_build/eb/arc28/arc-28-emit-function-builder.d.ts +1 -2
- package/awst_build/eb/arc4/uintn.d.ts +1 -1
- package/awst_build/eb/arc4/util.d.ts +1 -0
- package/awst_build/eb/array-like/util.d.ts +0 -1
- package/awst_build/eb/logged-error-builder.d.ts +11 -0
- package/awst_build/models/decorator-data.d.ts +1 -0
- package/awst_build/ptypes/for-export.d.ts +0 -1
- package/awst_build/ptypes/index.d.ts +2 -0
- package/bin/puyats-clientgen.d.ts +2 -0
- package/bin/puyats-clientgen.mjs +101 -0
- package/bin/puyats-clientgen.mjs.map +1 -0
- package/bin/puyats-ls.mjs +21 -46
- package/bin/puyats-ls.mjs.map +1 -1
- package/bin/run-cli.mjs +18 -12
- package/bin/run-cli.mjs.map +1 -1
- package/{check-node-version-BtcNqlid.js → check-node-version-DcMVGPC-.js} +3 -3
- package/{check-node-version-BtcNqlid.js.map → check-node-version-DcMVGPC-.js.map} +1 -1
- package/cli/build-command.d.ts +2 -0
- package/cli.mjs +36 -76
- package/cli.mjs.map +1 -1
- package/clientgen.d.ts +1 -0
- package/code-fix/{invalid-non-null-assertion.d.ts → no-op-non-null-assertion.d.ts} +1 -1
- package/{compile-Cj7vjDbw.js → compile-D0CpLiRh.js} +13 -4
- package/compile-D0CpLiRh.js.map +1 -0
- package/compile.d.ts +1 -1
- package/constants.d.ts +1 -1
- package/contract-class-model-CLKobHyV.js +5574 -0
- package/contract-class-model-CLKobHyV.js.map +1 -0
- package/index.d.ts +1 -1
- package/index.mjs +17 -10
- package/index.mjs.map +1 -1
- package/logger/index.d.ts +1 -0
- package/{options-Cbipn6vL.js → options-B93nVWrL.js} +2419 -8288
- package/options-B93nVWrL.js.map +1 -0
- package/options.d.ts +4 -0
- package/package.json +13 -12
- package/puya/puya-service.d.ts +5 -1
- package/{resolve-puya-path-CsuzbFH2.js → resolve-puya-path-D7qDcdPx.js} +9 -45
- package/resolve-puya-path-D7qDcdPx.js.map +1 -0
- package/semver-BPw8lYGI.js +45 -0
- package/semver-BPw8lYGI.js.map +1 -0
- package/util/typed-message-port.d.ts +2 -2
- package/util-BhM5b2cL.js +63 -0
- package/util-BhM5b2cL.js.map +1 -0
- package/visitor/syntax-names.d.ts +190 -190
- package/analyser-service-DSK9g7zQ.js.map +0 -1
- package/compile-Cj7vjDbw.js.map +0 -1
- package/options-Cbipn6vL.js.map +0 -1
- package/puya/index.d.ts +0 -14
- package/resolve-puya-path-CsuzbFH2.js.map +0 -1
- package/util/arc4-signature-parser.d.ts +0 -14
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type ts from 'typescript';
|
|
2
|
-
import type { ResourceEncoding } from '../../awst';
|
|
3
2
|
import * as awst from '../../awst/nodes';
|
|
4
3
|
import type { SourceLocation } from '../../awst/source-location';
|
|
5
4
|
import type { NodeBuilder } from '../eb';
|
|
@@ -24,7 +23,6 @@ export declare class ContractMethodVisitor extends ContractMethodBaseVisitor {
|
|
|
24
23
|
* @private
|
|
25
24
|
*/
|
|
26
25
|
private getConventionalRoutingConfig;
|
|
27
|
-
checkABIMethodTypes(functionType: FunctionPType, resourceEncoding: ResourceEncoding, sourceLocation: SourceLocation): void;
|
|
28
26
|
checkBareMethodTypes(functionType: FunctionPType, sourceLocation: SourceLocation): void;
|
|
29
27
|
private buildDefaultArgument;
|
|
30
28
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import type ts from 'typescript';
|
|
2
|
-
import { SourceLocation } from '../../../awst/source-location';
|
|
2
|
+
import type { SourceLocation } from '../../../awst/source-location';
|
|
3
3
|
import type { PType } from '../../ptypes';
|
|
4
4
|
import type { NodeBuilder } from '../index';
|
|
5
5
|
import { FunctionBuilder } from '../index';
|
|
6
6
|
export declare class Arc28EmitFunctionBuilder extends FunctionBuilder {
|
|
7
7
|
readonly ptype: import("../../ptypes").LibFunctionType;
|
|
8
|
-
private encode;
|
|
9
8
|
private resolvePropertyValue;
|
|
10
9
|
call(args: ReadonlyArray<NodeBuilder>, typeArgs: ReadonlyArray<PType>, sourceLocation: SourceLocation<ts.CallExpression>): NodeBuilder;
|
|
11
10
|
}
|
|
@@ -15,7 +15,7 @@ export declare const classBuilderForUintNAlias: (aliasClass: LibClassType, alias
|
|
|
15
15
|
newCall(args: ReadonlyArray<NodeBuilder>, typeArgs: ReadonlyArray<PType>, sourceLocation: SourceLocation): InstanceBuilder;
|
|
16
16
|
call(args: ReadonlyArray<NodeBuilder>, typeArgs: ReadonlyArray<PType>, sourceLocation: SourceLocation<import("typescript").CallExpression>): NodeBuilder;
|
|
17
17
|
readonly sourceLocation: SourceLocation;
|
|
18
|
-
|
|
18
|
+
get typeDescription(): string;
|
|
19
19
|
taggedTemplate(head: string, spans: ReadonlyArray<readonly [InstanceBuilder, string]>, typeArgs: ReadonlyArray<PType>, sourceLocation: SourceLocation): InstanceBuilder;
|
|
20
20
|
hasProperty(_name: string): boolean;
|
|
21
21
|
memberAccess(name: string, sourceLocation: SourceLocation): NodeBuilder;
|
|
@@ -21,6 +21,7 @@ export declare class MethodSelectorFunctionBuilder extends FunctionBuilder {
|
|
|
21
21
|
readonly ptype: import("../../ptypes").LibFunctionType;
|
|
22
22
|
call(args: ReadonlyArray<NodeBuilder>, typeArgs: ReadonlyArray<PType>, sourceLocation: SourceLocation<ts.CallExpression>): NodeBuilder;
|
|
23
23
|
}
|
|
24
|
+
export declare const validateEncodingMap: Record<string, boolean>;
|
|
24
25
|
export declare class SizeOfFunctionBuilder extends FunctionBuilder {
|
|
25
26
|
readonly ptype: import("../../ptypes").LibFunctionType;
|
|
26
27
|
call(args: ReadonlyArray<NodeBuilder>, typeArgs: ReadonlyArray<PType>, sourceLocation: SourceLocation<ts.CallExpression>): NodeBuilder;
|
|
@@ -3,4 +3,3 @@ import { MutableTuplePType } from '../../ptypes';
|
|
|
3
3
|
import type { InstanceBuilder } from '../index';
|
|
4
4
|
export declare function newArray(ptype: ArrayPType | ReadonlyArrayPType, valueProvider: InstanceBuilder): import("../../../awst/nodes").NewArray;
|
|
5
5
|
export declare function newTuple(ptype: MutableTuplePType | ReadonlyTuplePType | ArrayLiteralPType, valueProvider: InstanceBuilder): import("../../../awst/nodes").VoidConstant | import("../../../awst/nodes").ARC4Encode | import("../../../awst/nodes").TupleExpression;
|
|
6
|
-
export declare function newArrayOrTuple(ptype: ArrayPType | ReadonlyArrayPType | MutableTuplePType | ReadonlyTuplePType | ArrayLiteralPType, valueProvider: InstanceBuilder): import("../../../awst/nodes").VoidConstant | import("../../../awst/nodes").ARC4Encode | import("../../../awst/nodes").TupleExpression | import("../../../awst/nodes").NewArray;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type ts from 'typescript';
|
|
2
|
+
import type { SourceLocation } from '../../awst/source-location';
|
|
3
|
+
import type { PType } from '../ptypes';
|
|
4
|
+
import type { NodeBuilder } from './index';
|
|
5
|
+
import { FunctionBuilder } from './index';
|
|
6
|
+
export declare class LoggedAssertFunctionBuilder extends FunctionBuilder {
|
|
7
|
+
call(args: ReadonlyArray<NodeBuilder>, typeArgs: ReadonlyArray<PType>, sourceLocation: SourceLocation<ts.CallExpression>): NodeBuilder;
|
|
8
|
+
}
|
|
9
|
+
export declare class LoggedErrFunctionBuilder extends FunctionBuilder {
|
|
10
|
+
call(args: ReadonlyArray<NodeBuilder>, typeArgs: ReadonlyArray<PType>, sourceLocation: SourceLocation<ts.CallExpression>): NodeBuilder;
|
|
11
|
+
}
|
|
@@ -42,6 +42,7 @@ export type LogicSigOptionsDecoratorData = {
|
|
|
42
42
|
avmVersion?: SupportedAvmVersion;
|
|
43
43
|
name?: string;
|
|
44
44
|
scratchSlots?: Set<bigint>;
|
|
45
|
+
validateEncoding?: boolean;
|
|
45
46
|
};
|
|
46
47
|
export type ContractOptionsDecoratorData = {
|
|
47
48
|
type: typeof Constants.symbolNames.contractOptionsDecoratorName;
|
|
@@ -573,6 +573,8 @@ export declare const BytesFunction: LibFunctionType;
|
|
|
573
573
|
export declare const logFunction: LibFunctionType;
|
|
574
574
|
export declare const assertFunction: LibFunctionType;
|
|
575
575
|
export declare const errFunction: LibFunctionType;
|
|
576
|
+
export declare const loggedAssertFunction: LibFunctionType;
|
|
577
|
+
export declare const loggedErrFunction: LibFunctionType;
|
|
576
578
|
export declare const assetPType: ABICompatibleInstanceType;
|
|
577
579
|
export declare const AssetFunction: LibFunctionType;
|
|
578
580
|
export declare const accountPType: ABICompatibleInstanceType;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { arc32ToArc56 } from '@algorandfoundation/algokit-utils/app-spec';
|
|
3
|
+
import { ArgumentParser } from 'argparse';
|
|
4
|
+
import { readFile } from 'fs/promises';
|
|
5
|
+
import { w as writeARC4Client } from '../arc4-clientgen-C7FQSt3R.js';
|
|
6
|
+
import { a as appVersion } from '../semver-BPw8lYGI.js';
|
|
7
|
+
import { c as checkNodeVersion } from '../check-node-version-DcMVGPC-.js';
|
|
8
|
+
import { a as addEnumArg, C as ConsoleLogSink } from '../util-BhM5b2cL.js';
|
|
9
|
+
import { L as LogLevel, l as logger, A as AbsolutePath, P as PuyaError, a as LoggingContext } from '../contract-class-model-CLKobHyV.js';
|
|
10
|
+
import '@algorandfoundation/algokit-utils/abi';
|
|
11
|
+
import 'fs';
|
|
12
|
+
import 'node:url';
|
|
13
|
+
import 'pathe';
|
|
14
|
+
import 'chalk';
|
|
15
|
+
import 'typescript';
|
|
16
|
+
import 'node:fs';
|
|
17
|
+
import 'node:util';
|
|
18
|
+
import 'node:crypto';
|
|
19
|
+
import 'polytype';
|
|
20
|
+
import 'node:async_hooks';
|
|
21
|
+
|
|
22
|
+
async function parseCliArguments() {
|
|
23
|
+
checkNodeVersion();
|
|
24
|
+
const parser = new ArgumentParser({
|
|
25
|
+
prog: 'puya-ts-clientgen',
|
|
26
|
+
});
|
|
27
|
+
addEnumArg(parser, {
|
|
28
|
+
name: '--log-level',
|
|
29
|
+
default: LogLevel.Info,
|
|
30
|
+
enumType: LogLevel,
|
|
31
|
+
help: 'The minimum log level to output',
|
|
32
|
+
});
|
|
33
|
+
parser.add_argument('--version', {
|
|
34
|
+
action: 'store_const',
|
|
35
|
+
help: 'Show application version',
|
|
36
|
+
const: 'version',
|
|
37
|
+
dest: 'command',
|
|
38
|
+
});
|
|
39
|
+
parser.add_argument('specs', {
|
|
40
|
+
metavar: 'SPECS',
|
|
41
|
+
nargs: '+',
|
|
42
|
+
help: 'The path, or paths to the .arc32.json or .arc56.json files',
|
|
43
|
+
});
|
|
44
|
+
parser.add_argument('--out-dir', {
|
|
45
|
+
action: 'store',
|
|
46
|
+
help: 'Where to output clientgen artifacts',
|
|
47
|
+
default: 'out',
|
|
48
|
+
});
|
|
49
|
+
parser.set_defaults({
|
|
50
|
+
command: 'clientgen',
|
|
51
|
+
});
|
|
52
|
+
const result = parser.parse_args();
|
|
53
|
+
switch (result.command) {
|
|
54
|
+
case 'clientgen':
|
|
55
|
+
await outputStubs(result.specs, result.out_dir, result.log_level);
|
|
56
|
+
break;
|
|
57
|
+
case 'version':
|
|
58
|
+
/* eslint-disable-next-line no-console */
|
|
59
|
+
console.log(appVersion());
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
parser.print_help();
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async function outputStubs(paths, outDir, logLevel) {
|
|
67
|
+
const logCtx = LoggingContext.create();
|
|
68
|
+
return logCtx.run(async () => {
|
|
69
|
+
logger.configure([new ConsoleLogSink(logLevel, AbsolutePath.resolve({ path: '' }))]);
|
|
70
|
+
for (const appSpecPath of paths) {
|
|
71
|
+
try {
|
|
72
|
+
const appSpecJSON = JSON.parse(await readFile(appSpecPath, { encoding: 'utf-8' }));
|
|
73
|
+
let appSpec;
|
|
74
|
+
if (appSpecPath.endsWith('.arc56.json')) {
|
|
75
|
+
appSpec = appSpecJSON;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
appSpec = arc32ToArc56(appSpecJSON);
|
|
79
|
+
}
|
|
80
|
+
const sourceFile = AbsolutePath.resolve({ path: appSpecPath });
|
|
81
|
+
const outFile = AbsolutePath.resolve({ path: outDir, workingDirectory: sourceFile.resolve('..') }).join(`${appSpec.name}.client.ts`);
|
|
82
|
+
await writeARC4Client(appSpec, outFile);
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
if (e instanceof PuyaError) {
|
|
86
|
+
logger.error(e);
|
|
87
|
+
}
|
|
88
|
+
else if (e instanceof Error) {
|
|
89
|
+
logger.error(e);
|
|
90
|
+
throw e;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
throw e;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
logCtx.exitIfErrors();
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
void parseCliArguments();
|
|
101
|
+
//# sourceMappingURL=puyats-clientgen.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"puyats-clientgen.mjs","sources":["../../src/clientgen.ts"],"sourcesContent":["import type { Arc56Contract } from '@algorandfoundation/algokit-utils/abi'\nimport { arc32ToArc56 } from '@algorandfoundation/algokit-utils/app-spec'\nimport { ArgumentParser } from 'argparse'\nimport { readFile } from 'fs/promises'\nimport { writeARC4Client } from './arc4-clientgen'\nimport { appVersion } from './cli/app-version'\nimport { checkNodeVersion } from './cli/check-node-version'\nimport { addEnumArg } from './cli/util'\nimport { PuyaError } from './errors'\nimport { logger, LoggingContext, LogLevel } from './logger'\nimport { ConsoleLogSink } from './logger/sinks/console-log-sink'\nimport { AbsolutePath } from './util/absolute-path'\nimport './util/polyfills'\n\ninterface ClientgenCommandArgs {\n command: 'clientgen'\n specs: string[]\n out_dir: string\n log_level: LogLevel\n}\n\ninterface VersionCommand {\n command: 'version'\n}\n\ntype PuyaTsClientgenCommand = ClientgenCommandArgs | VersionCommand\n\nasync function parseCliArguments() {\n checkNodeVersion()\n const parser = new ArgumentParser({\n prog: 'puya-ts-clientgen',\n })\n\n addEnumArg(parser, {\n name: '--log-level',\n default: LogLevel.Info,\n enumType: LogLevel,\n help: 'The minimum log level to output',\n })\n parser.add_argument('--version', {\n action: 'store_const',\n help: 'Show application version',\n const: 'version',\n dest: 'command',\n })\n parser.add_argument('specs', {\n metavar: 'SPECS',\n nargs: '+',\n help: 'The path, or paths to the .arc32.json or .arc56.json files',\n })\n parser.add_argument('--out-dir', {\n action: 'store',\n help: 'Where to output clientgen artifacts',\n default: 'out',\n })\n parser.set_defaults({\n command: 'clientgen',\n })\n const result: PuyaTsClientgenCommand = parser.parse_args()\n switch (result.command) {\n case 'clientgen':\n await outputStubs(result.specs, result.out_dir, result.log_level)\n break\n case 'version':\n /* eslint-disable-next-line no-console */\n console.log(appVersion())\n break\n default:\n parser.print_help()\n break\n }\n}\n\nasync function outputStubs(paths: string[], outDir: string, logLevel: LogLevel) {\n const logCtx = LoggingContext.create()\n return logCtx.run(async () => {\n logger.configure([new ConsoleLogSink(logLevel, AbsolutePath.resolve({ path: '' }))])\n for (const appSpecPath of paths) {\n try {\n const appSpecJSON = JSON.parse(await readFile(appSpecPath, { encoding: 'utf-8' }))\n let appSpec: Arc56Contract\n if (appSpecPath.endsWith('.arc56.json')) {\n appSpec = appSpecJSON\n } else {\n appSpec = arc32ToArc56(appSpecJSON)\n }\n const sourceFile = AbsolutePath.resolve({ path: appSpecPath })\n const outFile = AbsolutePath.resolve({ path: outDir, workingDirectory: sourceFile.resolve('..') }).join(`${appSpec.name}.client.ts`)\n await writeARC4Client(appSpec, outFile)\n } catch (e) {\n if (e instanceof PuyaError) {\n logger.error(e)\n } else if (e instanceof Error) {\n logger.error(e)\n throw e\n } else {\n throw e\n }\n }\n }\n logCtx.exitIfErrors()\n })\n}\n\nvoid parseCliArguments()\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2BA,eAAe,iBAAiB,GAAA;AAC9B,IAAA,gBAAgB,EAAE;AAClB,IAAA,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;AAChC,QAAA,IAAI,EAAE,mBAAmB;AAC1B,KAAA,CAAC;IAEF,UAAU,CAAC,MAAM,EAAE;AACjB,QAAA,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,QAAQ,CAAC,IAAI;AACtB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,IAAI,EAAE,iCAAiC;AACxC,KAAA,CAAC;AACF,IAAA,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/B,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE,SAAS;AAChB,KAAA,CAAC;AACF,IAAA,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3B,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,IAAI,EAAE,4DAA4D;AACnE,KAAA,CAAC;AACF,IAAA,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/B,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,IAAI,EAAE,qCAAqC;AAC3C,QAAA,OAAO,EAAE,KAAK;AACf,KAAA,CAAC;IACF,MAAM,CAAC,YAAY,CAAC;AAClB,QAAA,OAAO,EAAE,WAAW;AACrB,KAAA,CAAC;AACF,IAAA,MAAM,MAAM,GAA2B,MAAM,CAAC,UAAU,EAAE;AAC1D,IAAA,QAAQ,MAAM,CAAC,OAAO;AACpB,QAAA,KAAK,WAAW;AACd,YAAA,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;YACjE;AACF,QAAA,KAAK,SAAS;;AAEZ,YAAA,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACzB;AACF,QAAA;YACE,MAAM,CAAC,UAAU,EAAE;YACnB;;AAEN;AAEA,eAAe,WAAW,CAAC,KAAe,EAAE,MAAc,EAAE,QAAkB,EAAA;AAC5E,IAAA,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE;AACtC,IAAA,OAAO,MAAM,CAAC,GAAG,CAAC,YAAW;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACpF,QAAA,KAAK,MAAM,WAAW,IAAI,KAAK,EAAE;AAC/B,YAAA,IAAI;AACF,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AAClF,gBAAA,IAAI,OAAsB;AAC1B,gBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;oBACvC,OAAO,GAAG,WAAW;gBACvB;qBAAO;AACL,oBAAA,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC;gBACrC;AACA,gBAAA,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC9D,gBAAA,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA,EAAG,OAAO,CAAC,IAAI,CAAA,UAAA,CAAY,CAAC;AACpI,gBAAA,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;YACzC;YAAE,OAAO,CAAC,EAAE;AACV,gBAAA,IAAI,CAAC,YAAY,SAAS,EAAE;AAC1B,oBAAA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjB;AAAO,qBAAA,IAAI,CAAC,YAAY,KAAK,EAAE;AAC7B,oBAAA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACf,oBAAA,MAAM,CAAC;gBACT;qBAAO;AACL,oBAAA,MAAM,CAAC;gBACT;YACF;QACF;QACA,MAAM,CAAC,YAAY,EAAE;AACvB,IAAA,CAAC,CAAC;AACJ;AAEA,KAAK,iBAAiB,EAAE"}
|
package/bin/puyats-ls.mjs
CHANGED
|
@@ -1,38 +1,40 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { L as LogLevel, ch as distinct, l as logger, ci as zipStrict, d as Constants } from '../contract-class-model-CLKobHyV.js';
|
|
3
3
|
import { ArgumentParser, BooleanOptionalAction } from 'argparse';
|
|
4
|
-
import { b as packageVersion, a as appVersion
|
|
5
|
-
import { c as checkNodeVersion } from '../check-node-version-
|
|
4
|
+
import { b as packageVersion, a as appVersion } from '../semver-BPw8lYGI.js';
|
|
5
|
+
import { c as checkNodeVersion } from '../check-node-version-DcMVGPC-.js';
|
|
6
6
|
import { __esDecorate, __runInitializers } from 'tslib';
|
|
7
|
-
import { r as requireMain, c as createAnalyserService, a as createNormalisedTextDocumentConnection, n as normalisedUri, i as isCodeFixData } from '../analyser-service-
|
|
7
|
+
import { r as requireMain, l as logCaughtExpression, L as LogExceptions, c as createAnalyserService, a as createNormalisedTextDocumentConnection, n as normalisedUri, i as isCodeFixData } from '../analyser-service-CGprVWba.js';
|
|
8
|
+
import { r as resolvePuyaPath } from '../resolve-puya-path-D7qDcdPx.js';
|
|
8
9
|
import EventEmitter from 'node:events';
|
|
9
|
-
import '
|
|
10
|
+
import { a8 as DefaultMap } from '../options-B93nVWrL.js';
|
|
11
|
+
import 'typescript';
|
|
10
12
|
import 'node:fs';
|
|
11
13
|
import 'node:util';
|
|
12
14
|
import 'pathe';
|
|
13
|
-
import 'node:buffer';
|
|
14
|
-
import 'typescript';
|
|
15
15
|
import 'node:crypto';
|
|
16
|
+
import 'polytype';
|
|
16
17
|
import 'node:async_hooks';
|
|
17
|
-
import '
|
|
18
|
+
import 'fs';
|
|
19
|
+
import 'node:url';
|
|
20
|
+
import 'chalk';
|
|
21
|
+
import 'crypto';
|
|
22
|
+
import 'node:worker_threads';
|
|
18
23
|
import 'util';
|
|
19
24
|
import 'path';
|
|
20
25
|
import 'os';
|
|
21
|
-
import 'crypto';
|
|
22
26
|
import 'net';
|
|
23
|
-
import '
|
|
24
|
-
import '
|
|
27
|
+
import 'url';
|
|
28
|
+
import 'child_process';
|
|
25
29
|
import 'glob';
|
|
26
|
-
import 'minimatch';
|
|
27
|
-
import 'fs';
|
|
28
|
-
import 'node:url';
|
|
29
30
|
import 'signal-exit';
|
|
31
|
+
import 'cross-spawn';
|
|
30
32
|
import 'tar';
|
|
31
33
|
import 'node:zlib';
|
|
32
|
-
import '
|
|
33
|
-
import 'node:
|
|
34
|
-
import '
|
|
35
|
-
import '
|
|
34
|
+
import 'arcsecond';
|
|
35
|
+
import 'node:buffer';
|
|
36
|
+
import 'change-case';
|
|
37
|
+
import 'minimatch';
|
|
36
38
|
|
|
37
39
|
/* --------------------------------------------------------------------------------------------
|
|
38
40
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
@@ -370,33 +372,6 @@ class CompileTriggerQueue {
|
|
|
370
372
|
}
|
|
371
373
|
}
|
|
372
374
|
|
|
373
|
-
function LogExceptions(target) {
|
|
374
|
-
return function (...args) {
|
|
375
|
-
try {
|
|
376
|
-
const result = target.apply(this, args);
|
|
377
|
-
if (result instanceof Promise) {
|
|
378
|
-
return result.catch((e) => {
|
|
379
|
-
logCaughtExpression(e);
|
|
380
|
-
process.exit(1);
|
|
381
|
-
});
|
|
382
|
-
}
|
|
383
|
-
return result;
|
|
384
|
-
}
|
|
385
|
-
catch (e) {
|
|
386
|
-
logCaughtExpression(e);
|
|
387
|
-
process.exit(1);
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
}
|
|
391
|
-
function logCaughtExpression(e) {
|
|
392
|
-
if (e instanceof Error) {
|
|
393
|
-
logger.error(e);
|
|
394
|
-
}
|
|
395
|
-
else {
|
|
396
|
-
logger.error(undefined, `Unknown error ${e}`);
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
|
|
400
375
|
let CompileWorker = (() => {
|
|
401
376
|
let _instanceExtraInitializers = [];
|
|
402
377
|
let _stop_decorators;
|
|
@@ -737,7 +712,7 @@ async function parseCliArguments() {
|
|
|
737
712
|
dest: 'debugMode',
|
|
738
713
|
action: BooleanOptionalAction,
|
|
739
714
|
});
|
|
740
|
-
const [result
|
|
715
|
+
const [result] = parser.parse_known_args();
|
|
741
716
|
switch (result.command) {
|
|
742
717
|
case 'version':
|
|
743
718
|
/* eslint-disable-next-line no-console */
|
package/bin/puyats-ls.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puyats-ls.mjs","sources":["../../node_modules/vscode-languageserver-textdocument/lib/esm/main.js","../../node_modules/vscode-languageserver/node.js","../../src/logger/sinks/language-server-log-sink.ts","../../src/language-server/compile-trigger-queue.ts","../../src/language-server/util/log-exceptions.ts","../../src/language-server/compile-worker.ts","../../src/language-server/diagnostics-manager.ts","../../src/language-server/puya-language-server.ts","../../src/language-server/parse.ts","../../src/cli-ls.ts"],"sourcesContent":["/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nclass FullTextDocument {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = undefined;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n const start = this.offsetAt(range.start);\n const end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(changes, version) {\n for (const change of changes) {\n if (FullTextDocument.isIncremental(change)) {\n // makes sure start is before end\n const range = getWellformedRange(change.range);\n // update content\n const startOffset = this.offsetAt(range.start);\n const endOffset = this.offsetAt(range.end);\n this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);\n // update the offsets\n const startLine = Math.max(range.start.line, 0);\n const endLine = Math.max(range.end.line, 0);\n let lineOffsets = this._lineOffsets;\n const addedLineOffsets = computeLineOffsets(change.text, false, startOffset);\n if (endLine - startLine === addedLineOffsets.length) {\n for (let i = 0, len = addedLineOffsets.length; i < len; i++) {\n lineOffsets[i + startLine + 1] = addedLineOffsets[i];\n }\n }\n else {\n if (addedLineOffsets.length < 10000) {\n lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets);\n }\n else { // avoid too many arguments for splice\n this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));\n }\n }\n const diff = change.text.length - (endOffset - startOffset);\n if (diff !== 0) {\n for (let i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {\n lineOffsets[i] = lineOffsets[i] + diff;\n }\n }\n }\n else if (FullTextDocument.isFull(change)) {\n this._content = change.text;\n this._lineOffsets = undefined;\n }\n else {\n throw new Error('Unknown change event received');\n }\n }\n this._version = version;\n }\n getLineOffsets() {\n if (this._lineOffsets === undefined) {\n this._lineOffsets = computeLineOffsets(this._content, true);\n }\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n const lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) {\n return { line: 0, character: offset };\n }\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n // low is the least x for which the line offset is larger than the current offset\n // or array.length if no line offset is larger than the current offset\n const line = low - 1;\n offset = this.ensureBeforeEOL(offset, lineOffsets[line]);\n return { line, character: offset - lineOffsets[line] };\n }\n offsetAt(position) {\n const lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n }\n else if (position.line < 0) {\n return 0;\n }\n const lineOffset = lineOffsets[position.line];\n if (position.character <= 0) {\n return lineOffset;\n }\n const nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n const offset = Math.min(lineOffset + position.character, nextLineOffset);\n return this.ensureBeforeEOL(offset, lineOffset);\n }\n ensureBeforeEOL(offset, lineOffset) {\n while (offset > lineOffset && isEOL(this._content.charCodeAt(offset - 1))) {\n offset--;\n }\n return offset;\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n static isIncremental(event) {\n const candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range !== undefined &&\n (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');\n }\n static isFull(event) {\n const candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;\n }\n}\nexport var TextDocument;\n(function (TextDocument) {\n /**\n * Creates a new text document.\n *\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's initial version number.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Updates a TextDocument by modifying its content.\n *\n * @param document the document to update. Only documents created by TextDocument.create are valid inputs.\n * @param changes the changes to apply to the document.\n * @param version the changes version for the document.\n * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.\n *\n */\n function update(document, changes, version) {\n if (document instanceof FullTextDocument) {\n document.update(changes, version);\n return document;\n }\n else {\n throw new Error('TextDocument.update: document must be created by TextDocument.create');\n }\n }\n TextDocument.update = update;\n function applyEdits(document, edits) {\n const text = document.getText();\n const sortedEdits = mergeSort(edits.map(getWellformedEdit), (a, b) => {\n const diff = a.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a.range.start.character - b.range.start.character;\n }\n return diff;\n });\n let lastModifiedOffset = 0;\n const spans = [];\n for (const e of sortedEdits) {\n const startOffset = document.offsetAt(e.range.start);\n if (startOffset < lastModifiedOffset) {\n throw new Error('Overlapping edit');\n }\n else if (startOffset > lastModifiedOffset) {\n spans.push(text.substring(lastModifiedOffset, startOffset));\n }\n if (e.newText.length) {\n spans.push(e.newText);\n }\n lastModifiedOffset = document.offsetAt(e.range.end);\n }\n spans.push(text.substr(lastModifiedOffset));\n return spans.join('');\n }\n TextDocument.applyEdits = applyEdits;\n})(TextDocument || (TextDocument = {}));\nfunction mergeSort(data, compare) {\n if (data.length <= 1) {\n // sorted\n return data;\n }\n const p = (data.length / 2) | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n const ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n // smaller_equal -> take left to preserve order\n data[i++] = left[leftIdx++];\n }\n else {\n // greater -> take right\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n}\nfunction computeLineOffsets(text, isAtLineStart, textOffset = 0) {\n const result = isAtLineStart ? [textOffset] : [];\n for (let i = 0; i < text.length; i++) {\n const ch = text.charCodeAt(i);\n if (isEOL(ch)) {\n if (ch === 13 /* CharCode.CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* CharCode.LineFeed */) {\n i++;\n }\n result.push(textOffset + i + 1);\n }\n }\n return result;\n}\nfunction isEOL(char) {\n return char === 13 /* CharCode.CarriageReturn */ || char === 10 /* CharCode.LineFeed */;\n}\nfunction getWellformedRange(range) {\n const start = range.start;\n const end = range.end;\n if (start.line > end.line || (start.line === end.line && start.character > end.character)) {\n return { start: end, end: start };\n }\n return range;\n}\nfunction getWellformedEdit(textEdit) {\n const range = getWellformedRange(textEdit.range);\n if (range !== textEdit.range) {\n return { newText: textEdit.newText, range };\n }\n return textEdit;\n}\n","/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ----------------------------------------------------------------------------------------- */\n'use strict';\n\nmodule.exports = require('./lib/node/main');","import type * as lsp from 'vscode-languageserver/node'\nimport type { LogEvent } from '../index'\nimport { LogLevel } from '../index'\nimport type { LogSink } from './index'\n\nexport class LanguageServerLogSink implements LogSink {\n constructor(private connection: lsp.Connection) {}\n\n minLogLevel = LogLevel.Debug\n\n add(e: LogEvent): void {\n if (e.sourceLocation) return // Ignore code specific logs\n\n switch (e.level) {\n case 'error':\n case 'info':\n case 'debug':\n this.connection.console[e.level](e.message)\n break\n case 'warning':\n this.connection.console.warn(e.message)\n break\n case 'critical':\n this.connection.console.error(e.message)\n break\n }\n }\n}\n","import EventEmitter from 'node:events'\nimport type * as lsp from 'vscode-languageserver/node'\nimport { distinct } from '../util'\n\nexport type WorkspaceCompileTrigger = {\n type: 'workspace'\n uris: lsp.URI[]\n}\nexport type FileCompileTrigger = {\n type: 'file'\n uris: lsp.URI[]\n}\n\nexport type CompileTrigger = WorkspaceCompileTrigger | FileCompileTrigger\n\ntype CompileTriggerQueueEvents = {\n itemEnqueued: [CompileTrigger]\n}\n\nexport class CompileTriggerQueue {\n private readonly queue: CompileTrigger[] = []\n private readonly events = new EventEmitter<CompileTriggerQueueEvents>()\n\n enqueue(trigger: CompileTrigger) {\n const lastInQueue = this.queue.at(-1)\n if (trigger.type === lastInQueue?.type) {\n this.queue.splice(-1, 1, {\n type: trigger.type,\n uris: lastInQueue.uris.concat(trigger.uris).filter(distinct()),\n })\n } else {\n this.queue.push(trigger)\n }\n this.events.emit('itemEnqueued', this.queue.at(-1)!)\n }\n\n tryDequeue(): CompileTrigger | undefined {\n return this.queue.shift()\n }\n\n onItemEnqueued(handler: (...args: CompileTriggerQueueEvents['itemEnqueued']) => void): lsp.Disposable {\n this.events.on('itemEnqueued', handler)\n return {\n dispose: () => {\n this.events.off('itemEnqueued', handler)\n },\n }\n }\n}\n","import type { DeliberateAny } from '../../typescript-helpers'\nimport { logger } from '../../logger'\n\nexport function LogExceptions<TThis, TArgs extends DeliberateAny[], TReturn>(target: (this: TThis, ...args: TArgs) => TReturn) {\n return function (this: TThis, ...args: TArgs): TReturn {\n try {\n const result = target.apply(this, args)\n if (result instanceof Promise) {\n return result.catch((e: unknown) => {\n logCaughtExpression(e)\n process.exit(1)\n }) as TReturn\n }\n return result\n } catch (e) {\n logCaughtExpression(e)\n process.exit(1)\n }\n }\n}\n\nexport function logCaughtExpression(e: unknown) {\n if (e instanceof Error) {\n logger.error(e)\n } else {\n logger.error(undefined, `Unknown error ${e}`)\n }\n}\n","import type { TextDocument } from 'vscode-languageserver-textdocument'\nimport type { TextDocuments } from 'vscode-languageserver/node.js'\nimport { logger } from '../logger'\nimport type { AnalyserService, OpenDocuments } from './analyser-service'\nimport type { CompileTrigger, CompileTriggerQueue } from './compile-trigger-queue'\nimport type { DiagnosticsManager } from './diagnostics-manager'\nimport { logCaughtExpression, LogExceptions } from './util/log-exceptions'\n\ntype ActiveBuild = {\n trigger: CompileTrigger\n abort: AbortController\n}\n\nexport class CompileWorker {\n stopping: boolean = false\n private stopped = Promise.withResolvers<void>()\n private sleeping: PromiseWithResolvers<void> | undefined = undefined\n private activeBuild: ActiveBuild | undefined = undefined\n constructor(\n private readonly queue: CompileTriggerQueue,\n private readonly analyserService: AnalyserService,\n private readonly documents: TextDocuments<TextDocument>,\n private readonly diagnostics: DiagnosticsManager,\n ) {\n this.queue.onItemEnqueued(this.onCompileTriggerQueueItemQueued.bind(this))\n }\n\n start() {\n setTimeout(async () => {\n while (!this.stopping) {\n try {\n const trigger = this.queue.tryDequeue()\n if (trigger) {\n logger.debug(undefined, `[Compile Worker] Found ${trigger.type} compile ${trigger.uris.join(', ')}`)\n this.activeBuild = { abort: new AbortController(), trigger }\n await this.compileWithService(trigger, this.activeBuild.abort.signal)\n delete this.activeBuild\n } else {\n logger.debug(undefined, `[Compile Worker] No work, sleeping`)\n this.sleeping = Promise.withResolvers()\n await this.sleeping.promise\n delete this.sleeping\n }\n } catch (e) {\n logCaughtExpression(e)\n }\n }\n this.stopped.resolve()\n })\n }\n\n @LogExceptions\n async stop() {\n this.stopping = true\n this.sleeping?.resolve()\n this.activeBuild?.abort.abort()\n await this.stopped.promise\n }\n\n onCompileTriggerQueueItemQueued(trigger: CompileTrigger) {\n if (this.activeBuild) {\n if (this.activeBuild.trigger.type === trigger.type) {\n if (new Set(trigger.uris).isSubsetOf(new Set(this.activeBuild.trigger.uris))) {\n logger.debug(undefined, `[Compile Worker] Aborting build, newer version of file is available`)\n this.activeBuild.abort.abort('Build superseded')\n }\n }\n }\n if (this.sleeping) {\n logger.debug(undefined, `[Compile Worker] New work, waking worker`)\n this.sleeping.resolve()\n }\n }\n\n private async compileWithService(trigger: CompileTrigger, abort: AbortSignal) {\n const openDocuments = this.documents.all().reduce((acc: OpenDocuments, cur) => {\n acc[cur.uri] = {\n contents: cur.getText(),\n version: cur.version,\n }\n return acc\n }, {})\n try {\n const results = await this.analyserService.analyse(\n {\n uris: trigger.uris,\n openDocuments,\n },\n abort,\n )\n for (const file of results) {\n this.diagnostics.setDiagnostics(file)\n }\n } catch (e) {\n if (e === 'aborted') return\n throw e\n }\n }\n}\n","import EventEmitter from 'node:events'\nimport type * as lsp from 'vscode-languageserver'\nimport { logger } from '../logger'\nimport { zipStrict } from '../util'\nimport { DefaultMap } from '../util/default-map'\n\nfunction diagnosticsAreSame(a: lsp.Diagnostic, b: lsp.Diagnostic) {\n return (\n a.message === b.message &&\n a.range.start.line === b.range.start.line &&\n a.range.start.character === b.range.start.character &&\n a.range.end.line === b.range.end.line &&\n a.range.end.character === b.range.end.character &&\n a.severity === b.severity\n )\n}\n\nfunction isSameOrMoreRecentVersion(prev: number | undefined, next: number | undefined): boolean {\n if (prev === undefined || next === undefined) return true\n return prev <= next\n}\n\nexport class SourceFileDiagnostics {\n private diagnostics: lsp.Diagnostic[] | 'pending' = 'pending'\n private version: number | undefined\n /**\n * Update the diagnostics for this file and return a boolean indicating if they have changed\n * @param version The file version used to generate these diagnostics\n * @param diagnostics\n */\n setDiagnostics({ version, diagnostics }: { diagnostics: lsp.Diagnostic[] | 'pending'; version: number | undefined }): boolean {\n // Ignore older diagnostics (even though this shouldn't happen)\n if (!isSameOrMoreRecentVersion(this.version, version)) return false\n if (diagnostics !== 'pending' && this.diagnostics !== 'pending' && diagnostics.length === this.diagnostics.length) {\n if (zipStrict(this.diagnostics, diagnostics).every(([l, r]) => diagnosticsAreSame(l, r))) {\n this.version = version\n return false\n }\n }\n this.diagnostics = diagnostics\n this.version = version\n\n return true\n }\n}\nexport type FileWithDiagnostics = {\n uri: lsp.DocumentUri\n version: number | undefined\n diagnostics: lsp.Diagnostic[]\n}\n\ntype DiagnosticEvents = {\n fileDiagnosticsChanged: [event: FileWithDiagnostics]\n}\n\nexport class DiagnosticsManager {\n private readonly sourceFiles = new DefaultMap<lsp.DocumentUri, SourceFileDiagnostics>()\n private readonly events = new EventEmitter<DiagnosticEvents>()\n\n setDiagnostics({\n uri,\n diagnostics,\n version,\n }: {\n uri: lsp.DocumentUri\n diagnostics: lsp.Diagnostic[] | 'pending'\n version: number | undefined\n }) {\n logger.debug(\n undefined,\n `[DiagMgr] Setting diagnostics for ${uri} ${version ?? '<no version>'} (${diagnostics === 'pending' ? 'pending' : diagnostics.length})`,\n )\n const fileDiagnostics = this.sourceFiles.getOrDefault(uri, () => new SourceFileDiagnostics())\n if (fileDiagnostics.setDiagnostics({ diagnostics, version })) {\n if (diagnostics === 'pending') return\n this.events.emit('fileDiagnosticsChanged', { uri, diagnostics, version })\n }\n }\n\n onFileDiagnosticsChanged(handler: (...args: DiagnosticEvents['fileDiagnosticsChanged']) => void): lsp.Disposable {\n this.events.on('fileDiagnosticsChanged', handler)\n return {\n dispose: () => {\n this.events.off('fileDiagnosticsChanged', handler)\n },\n }\n }\n}\n","import { TextDocument } from 'vscode-languageserver-textdocument'\nimport * as lsp from 'vscode-languageserver/node'\nimport { appVersion, packageVersion } from '../cli/app-version'\nimport { Constants } from '../constants'\nimport { logger, LogLevel } from '../logger'\nimport { LanguageServerLogSink } from '../logger/sinks/language-server-log-sink'\nimport { resolvePuyaPath } from '../puya/resolve-puya-path'\nimport type { AnalyserService } from './analyser-service'\nimport { createAnalyserService } from './analyser-service'\nimport { CompileTriggerQueue } from './compile-trigger-queue'\nimport { CompileWorker } from './compile-worker'\nimport type { FileWithDiagnostics } from './diagnostics-manager'\nimport { DiagnosticsManager } from './diagnostics-manager'\nimport { isCodeFixData } from './mapping'\nimport { LogExceptions } from './util/log-exceptions'\nimport { createNormalisedTextDocumentConnection, normalisedUri } from './util/uris'\n\ninterface LanguageServerConfiguration {\n // use LogLevel member names to maintain consistency with other extension settings\n logLevel?: Omit<keyof typeof LogLevel, 'Critical'>\n debounce?: number\n}\n\nconst resolveConnection = async (lspPort: number | undefined) => {\n if (!lspPort) {\n return lsp.createConnection(lsp.ProposedFeatures.all)\n }\n\n // When the debug env variable PUYA_TS_DEBUG_LSP_PORT is set, we start the server with socket transport.\n // Note: this is actually the opposite to how vscode-languageserver is designed.\n // Normally, the extension is the web socker server and the language server is the client.\n // Here, we flip it. This allows an easier debugging experience.\n // If changes are made to the language server, you can just restart the debugger\n // and choose the option \"Restart language server\" in the VS Code extension host instance.\n const transport = await lsp.createClientSocketTransport(lspPort)\n const protocol = await transport.onConnected()\n\n return lsp.createConnection(lsp.ProposedFeatures.all, protocol[0], protocol[1])\n}\n\nexport type LanguageServerOptions = {\n port?: number\n customPuyaPath?: string\n}\n\nconst PACKAGE_VERSION = packageVersion()\n\nexport class PuyaLanguageServer {\n readonly documents = new lsp.TextDocuments(TextDocument)\n readonly triggers = new CompileTriggerQueue()\n readonly workspaceFolders: lsp.URI[] = []\n readonly diagnosticsMgr: DiagnosticsManager\n readonly compileWorker: CompileWorker\n readonly analyserService: AnalyserService\n stopping = false\n\n constructor(\n public readonly connection: lsp.Connection,\n private readonly loggingSink: LanguageServerLogSink,\n puyaPath: string,\n ) {\n this.diagnosticsMgr = new DiagnosticsManager()\n this.analyserService = createAnalyserService({ puyaPath })\n this.compileWorker = new CompileWorker(this.triggers, this.analyserService, this.documents, this.diagnosticsMgr)\n\n connection.onInitialize(this.initialize.bind(this))\n connection.onInitialized(this.initialized.bind(this))\n connection.onCodeAction(this.codeAction.bind(this))\n connection.onDidChangeConfiguration(this.configurationChange.bind(this))\n this.documents.onDidChangeContent(this.documentDidChangeContent.bind(this))\n this.diagnosticsMgr.onFileDiagnosticsChanged(this.fileDiagnosticsChanged.bind(this))\n connection.onShutdown(this.shutdown.bind(this))\n }\n\n start() {\n this.documents.listen(createNormalisedTextDocumentConnection(this.connection))\n this.connection.listen()\n this.compileWorker.start()\n }\n\n async shutdown() {\n logger.debug(undefined, '[PuyaLanguageServer] Shutting down')\n this.stopping = true\n await this.compileWorker.stop()\n await this.analyserService.shutdown()\n logger.debug(undefined, '[PuyaLanguageServer] Shutdown')\n }\n\n initialize(params: lsp.InitializeParams): lsp.InitializeResult {\n this.workspaceFolders.push(...(params.workspaceFolders?.map((f) => normalisedUri({ uri: f.uri }).toString()) ?? []))\n this.triggers.enqueue({\n type: 'workspace',\n uris: this.workspaceFolders,\n })\n return {\n serverInfo: {\n name: 'Puya-TS Language Server',\n version: PACKAGE_VERSION,\n },\n capabilities: {\n textDocumentSync: lsp.TextDocumentSyncKind.Incremental,\n codeActionProvider: {\n resolveProvider: false,\n },\n },\n }\n }\n\n @LogExceptions\n initialized(params: lsp.InitializedParams) {\n logger.debug(undefined, `${Constants.languageServerSource}-ls initialized`)\n }\n\n @LogExceptions\n async fileDiagnosticsChanged(params: FileWithDiagnostics) {\n if (this.stopping) {\n logger.debug(undefined, `[Diagnostics Ignored (shutting down)]: ${params.uri}`)\n return\n }\n logger.debug(undefined, `[Diagnostics Changed]: ${params.uri}`)\n\n await this.connection.sendDiagnostics(params)\n logger.debug(undefined, `[Diagnostics Sent]: ${params.uri}`)\n }\n\n @LogExceptions\n documentDidChangeContent(params: lsp.TextDocumentChangeEvent<TextDocument>) {\n if (this.stopping) return\n const normalizedDocumentUri = normalisedUri({ uri: params.document.uri }).toString()\n logger.debug(undefined, `[Document Changed]: ${normalizedDocumentUri}`)\n this.diagnosticsMgr.setDiagnostics({ uri: normalizedDocumentUri, version: params.document.version, diagnostics: 'pending' })\n\n this.triggers.enqueue({\n type: 'file',\n uris: [normalizedDocumentUri],\n })\n }\n\n /**\n * Bound to connection.onCodeAction and called when a user hovers over a piece of code.\n *\n * Params includes the text range the user is hovering over and any diagnostics known to the\n * client at the time.\n *\n * Response should include actions the user can take and the command or text edits that should be\n * invoked/applied if selected\n * @param params\n */\n @LogExceptions\n codeAction(params: lsp.CodeActionParams): lsp.CodeAction[] {\n return params.context.diagnostics.flatMap((d): lsp.CodeAction | lsp.CodeAction[] => {\n if (isCodeFixData(d.data)) {\n return {\n title: d.data.message,\n kind: lsp.CodeActionKind.QuickFix,\n diagnostics: [d],\n edit: {\n changes: {\n [params.textDocument.uri]: [...d.data.edits],\n },\n },\n }\n }\n return []\n })\n }\n\n @LogExceptions\n configurationChange(params: lsp.DidChangeConfigurationParams) {\n const settings = params.settings as LanguageServerConfiguration\n const logLevel = LogLevel[settings.logLevel as keyof typeof LogLevel]\n if (logLevel !== undefined) {\n logger.debug(undefined, `setting log level to ${logLevel}`)\n this.loggingSink.minLogLevel = logLevel\n }\n }\n}\n\n// eslint-disable-next-line no-console\nconst cliLog = console.error\n\nexport async function startLanguageServer(options: LanguageServerOptions) {\n cliLog(`Puya-TS Language Server:\\n${appVersion({ withAVMVersion: false })}`)\n const connection = await resolveConnection(options.port)\n const languageServerSink = new LanguageServerLogSink(connection)\n logger.configure([languageServerSink])\n try {\n const puyaPath = await resolvePuyaPath(options)\n const server = new PuyaLanguageServer(connection, languageServerSink, puyaPath)\n server.start()\n } catch (e) {\n connection.console.error(`Unhandled exception ${e}`)\n }\n}\n","import { ArgumentParser, BooleanOptionalAction } from 'argparse'\nimport { appVersion } from '../cli/app-version'\nimport { checkNodeVersion } from '../cli/check-node-version'\nimport type { LanguageServerOptions } from './puya-language-server'\nimport { startLanguageServer } from './puya-language-server'\n\nexport async function parseCliArguments() {\n checkNodeVersion()\n const prog = 'puyats-ls'\n const parser = new ArgumentParser({\n prog,\n })\n\n parser.add_argument('--version', {\n action: 'store_const',\n help: 'Show application version',\n const: 'version',\n dest: 'command',\n })\n parser.add_argument('--debug-mode', {\n help: 'Start the language server in debug mode. Server will listen on the debug port (default 4001) for connections.',\n default: false,\n dest: 'debugMode',\n action: BooleanOptionalAction,\n })\n const [result, _] = parser.parse_known_args() as [PuyaTsCommand, unknown]\n\n switch (result.command) {\n case 'version':\n /* eslint-disable-next-line no-console */\n console.log(appVersion({ name: prog }))\n break\n default: {\n const options: LanguageServerOptions = {\n port: result.debugMode ? (parsePort(process.env.PUYA_TS_DEBUG_LSP_PORT) ?? 4001) : undefined,\n }\n\n await startLanguageServer(options)\n break\n }\n }\n}\n\ntype PuyaTsCommand = NoCommandArgs | VersionCommand\ninterface NoCommandArgs {\n command: 'none'\n debugMode: boolean\n}\ninterface VersionCommand {\n command: 'version'\n}\n\nfunction parsePort(value: string | undefined) {\n if (value === undefined) return undefined\n const val = Number(value)\n if (val > 0 && val < 2 ** 16 && Math.floor(val) === val) {\n return val\n }\n throw new Error(`Invalid port number ${value}`)\n}\n","import './util/polyfills'\nimport { parseCliArguments } from './language-server/parse'\n\nvoid parseCliArguments()\n"],"names":["require$$0","lsp.createConnection","lsp.ProposedFeatures","lsp.createClientSocketTransport","lsp.TextDocuments","lsp.TextDocumentSyncKind","lsp.CodeActionKind"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"puyats-ls.mjs","sources":["../../node_modules/vscode-languageserver-textdocument/lib/esm/main.js","../../node_modules/vscode-languageserver/node.js","../../src/logger/sinks/language-server-log-sink.ts","../../src/language-server/compile-trigger-queue.ts","../../src/language-server/compile-worker.ts","../../src/language-server/diagnostics-manager.ts","../../src/language-server/puya-language-server.ts","../../src/language-server/parse.ts","../../src/cli-ls.ts"],"sourcesContent":["/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nclass FullTextDocument {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = undefined;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n const start = this.offsetAt(range.start);\n const end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(changes, version) {\n for (const change of changes) {\n if (FullTextDocument.isIncremental(change)) {\n // makes sure start is before end\n const range = getWellformedRange(change.range);\n // update content\n const startOffset = this.offsetAt(range.start);\n const endOffset = this.offsetAt(range.end);\n this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);\n // update the offsets\n const startLine = Math.max(range.start.line, 0);\n const endLine = Math.max(range.end.line, 0);\n let lineOffsets = this._lineOffsets;\n const addedLineOffsets = computeLineOffsets(change.text, false, startOffset);\n if (endLine - startLine === addedLineOffsets.length) {\n for (let i = 0, len = addedLineOffsets.length; i < len; i++) {\n lineOffsets[i + startLine + 1] = addedLineOffsets[i];\n }\n }\n else {\n if (addedLineOffsets.length < 10000) {\n lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets);\n }\n else { // avoid too many arguments for splice\n this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));\n }\n }\n const diff = change.text.length - (endOffset - startOffset);\n if (diff !== 0) {\n for (let i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {\n lineOffsets[i] = lineOffsets[i] + diff;\n }\n }\n }\n else if (FullTextDocument.isFull(change)) {\n this._content = change.text;\n this._lineOffsets = undefined;\n }\n else {\n throw new Error('Unknown change event received');\n }\n }\n this._version = version;\n }\n getLineOffsets() {\n if (this._lineOffsets === undefined) {\n this._lineOffsets = computeLineOffsets(this._content, true);\n }\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n const lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) {\n return { line: 0, character: offset };\n }\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n // low is the least x for which the line offset is larger than the current offset\n // or array.length if no line offset is larger than the current offset\n const line = low - 1;\n offset = this.ensureBeforeEOL(offset, lineOffsets[line]);\n return { line, character: offset - lineOffsets[line] };\n }\n offsetAt(position) {\n const lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n }\n else if (position.line < 0) {\n return 0;\n }\n const lineOffset = lineOffsets[position.line];\n if (position.character <= 0) {\n return lineOffset;\n }\n const nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n const offset = Math.min(lineOffset + position.character, nextLineOffset);\n return this.ensureBeforeEOL(offset, lineOffset);\n }\n ensureBeforeEOL(offset, lineOffset) {\n while (offset > lineOffset && isEOL(this._content.charCodeAt(offset - 1))) {\n offset--;\n }\n return offset;\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n static isIncremental(event) {\n const candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range !== undefined &&\n (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');\n }\n static isFull(event) {\n const candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;\n }\n}\nexport var TextDocument;\n(function (TextDocument) {\n /**\n * Creates a new text document.\n *\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's initial version number.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Updates a TextDocument by modifying its content.\n *\n * @param document the document to update. Only documents created by TextDocument.create are valid inputs.\n * @param changes the changes to apply to the document.\n * @param version the changes version for the document.\n * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.\n *\n */\n function update(document, changes, version) {\n if (document instanceof FullTextDocument) {\n document.update(changes, version);\n return document;\n }\n else {\n throw new Error('TextDocument.update: document must be created by TextDocument.create');\n }\n }\n TextDocument.update = update;\n function applyEdits(document, edits) {\n const text = document.getText();\n const sortedEdits = mergeSort(edits.map(getWellformedEdit), (a, b) => {\n const diff = a.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a.range.start.character - b.range.start.character;\n }\n return diff;\n });\n let lastModifiedOffset = 0;\n const spans = [];\n for (const e of sortedEdits) {\n const startOffset = document.offsetAt(e.range.start);\n if (startOffset < lastModifiedOffset) {\n throw new Error('Overlapping edit');\n }\n else if (startOffset > lastModifiedOffset) {\n spans.push(text.substring(lastModifiedOffset, startOffset));\n }\n if (e.newText.length) {\n spans.push(e.newText);\n }\n lastModifiedOffset = document.offsetAt(e.range.end);\n }\n spans.push(text.substr(lastModifiedOffset));\n return spans.join('');\n }\n TextDocument.applyEdits = applyEdits;\n})(TextDocument || (TextDocument = {}));\nfunction mergeSort(data, compare) {\n if (data.length <= 1) {\n // sorted\n return data;\n }\n const p = (data.length / 2) | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n const ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n // smaller_equal -> take left to preserve order\n data[i++] = left[leftIdx++];\n }\n else {\n // greater -> take right\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n}\nfunction computeLineOffsets(text, isAtLineStart, textOffset = 0) {\n const result = isAtLineStart ? [textOffset] : [];\n for (let i = 0; i < text.length; i++) {\n const ch = text.charCodeAt(i);\n if (isEOL(ch)) {\n if (ch === 13 /* CharCode.CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* CharCode.LineFeed */) {\n i++;\n }\n result.push(textOffset + i + 1);\n }\n }\n return result;\n}\nfunction isEOL(char) {\n return char === 13 /* CharCode.CarriageReturn */ || char === 10 /* CharCode.LineFeed */;\n}\nfunction getWellformedRange(range) {\n const start = range.start;\n const end = range.end;\n if (start.line > end.line || (start.line === end.line && start.character > end.character)) {\n return { start: end, end: start };\n }\n return range;\n}\nfunction getWellformedEdit(textEdit) {\n const range = getWellformedRange(textEdit.range);\n if (range !== textEdit.range) {\n return { newText: textEdit.newText, range };\n }\n return textEdit;\n}\n","/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ----------------------------------------------------------------------------------------- */\n'use strict';\n\nmodule.exports = require('./lib/node/main');","import type * as lsp from 'vscode-languageserver/node'\nimport type { LogEvent } from '../index'\nimport { LogLevel } from '../index'\nimport type { LogSink } from './index'\n\nexport class LanguageServerLogSink implements LogSink {\n constructor(private connection: lsp.Connection) {}\n\n minLogLevel = LogLevel.Debug\n\n add(e: LogEvent): void {\n if (e.sourceLocation) return // Ignore code specific logs\n\n switch (e.level) {\n case 'error':\n case 'info':\n case 'debug':\n this.connection.console[e.level](e.message)\n break\n case 'warning':\n this.connection.console.warn(e.message)\n break\n case 'critical':\n this.connection.console.error(e.message)\n break\n }\n }\n}\n","import EventEmitter from 'node:events'\nimport type * as lsp from 'vscode-languageserver/node'\nimport { distinct } from '../util'\n\nexport type WorkspaceCompileTrigger = {\n type: 'workspace'\n uris: lsp.URI[]\n}\nexport type FileCompileTrigger = {\n type: 'file'\n uris: lsp.URI[]\n}\n\nexport type CompileTrigger = WorkspaceCompileTrigger | FileCompileTrigger\n\ntype CompileTriggerQueueEvents = {\n itemEnqueued: [CompileTrigger]\n}\n\nexport class CompileTriggerQueue {\n private readonly queue: CompileTrigger[] = []\n private readonly events = new EventEmitter<CompileTriggerQueueEvents>()\n\n enqueue(trigger: CompileTrigger) {\n const lastInQueue = this.queue.at(-1)\n if (trigger.type === lastInQueue?.type) {\n this.queue.splice(-1, 1, {\n type: trigger.type,\n uris: lastInQueue.uris.concat(trigger.uris).filter(distinct()),\n })\n } else {\n this.queue.push(trigger)\n }\n this.events.emit('itemEnqueued', this.queue.at(-1)!)\n }\n\n tryDequeue(): CompileTrigger | undefined {\n return this.queue.shift()\n }\n\n onItemEnqueued(handler: (...args: CompileTriggerQueueEvents['itemEnqueued']) => void): lsp.Disposable {\n this.events.on('itemEnqueued', handler)\n return {\n dispose: () => {\n this.events.off('itemEnqueued', handler)\n },\n }\n }\n}\n","import type { TextDocument } from 'vscode-languageserver-textdocument'\nimport type { TextDocuments } from 'vscode-languageserver/node.js'\nimport { logger } from '../logger'\nimport type { AnalyserService, OpenDocuments } from './analyser-service'\nimport type { CompileTrigger, CompileTriggerQueue } from './compile-trigger-queue'\nimport type { DiagnosticsManager } from './diagnostics-manager'\nimport { logCaughtExpression, LogExceptions } from './util/log-exceptions'\n\ntype ActiveBuild = {\n trigger: CompileTrigger\n abort: AbortController\n}\n\nexport class CompileWorker {\n stopping: boolean = false\n private stopped = Promise.withResolvers<void>()\n private sleeping: PromiseWithResolvers<void> | undefined = undefined\n private activeBuild: ActiveBuild | undefined = undefined\n constructor(\n private readonly queue: CompileTriggerQueue,\n private readonly analyserService: AnalyserService,\n private readonly documents: TextDocuments<TextDocument>,\n private readonly diagnostics: DiagnosticsManager,\n ) {\n this.queue.onItemEnqueued(this.onCompileTriggerQueueItemQueued.bind(this))\n }\n\n start() {\n setTimeout(async () => {\n while (!this.stopping) {\n try {\n const trigger = this.queue.tryDequeue()\n if (trigger) {\n logger.debug(undefined, `[Compile Worker] Found ${trigger.type} compile ${trigger.uris.join(', ')}`)\n this.activeBuild = { abort: new AbortController(), trigger }\n await this.compileWithService(trigger, this.activeBuild.abort.signal)\n delete this.activeBuild\n } else {\n logger.debug(undefined, `[Compile Worker] No work, sleeping`)\n this.sleeping = Promise.withResolvers()\n await this.sleeping.promise\n delete this.sleeping\n }\n } catch (e) {\n logCaughtExpression(e)\n }\n }\n this.stopped.resolve()\n })\n }\n\n @LogExceptions\n async stop() {\n this.stopping = true\n this.sleeping?.resolve()\n this.activeBuild?.abort.abort()\n await this.stopped.promise\n }\n\n onCompileTriggerQueueItemQueued(trigger: CompileTrigger) {\n if (this.activeBuild) {\n if (this.activeBuild.trigger.type === trigger.type) {\n if (new Set(trigger.uris).isSubsetOf(new Set(this.activeBuild.trigger.uris))) {\n logger.debug(undefined, `[Compile Worker] Aborting build, newer version of file is available`)\n this.activeBuild.abort.abort('Build superseded')\n }\n }\n }\n if (this.sleeping) {\n logger.debug(undefined, `[Compile Worker] New work, waking worker`)\n this.sleeping.resolve()\n }\n }\n\n private async compileWithService(trigger: CompileTrigger, abort: AbortSignal) {\n const openDocuments = this.documents.all().reduce((acc: OpenDocuments, cur) => {\n acc[cur.uri] = {\n contents: cur.getText(),\n version: cur.version,\n }\n return acc\n }, {})\n try {\n const results = await this.analyserService.analyse(\n {\n uris: trigger.uris,\n openDocuments,\n },\n abort,\n )\n for (const file of results) {\n this.diagnostics.setDiagnostics(file)\n }\n } catch (e) {\n if (e === 'aborted') return\n throw e\n }\n }\n}\n","import EventEmitter from 'node:events'\nimport type * as lsp from 'vscode-languageserver'\nimport { logger } from '../logger'\nimport { zipStrict } from '../util'\nimport { DefaultMap } from '../util/default-map'\n\nfunction diagnosticsAreSame(a: lsp.Diagnostic, b: lsp.Diagnostic) {\n return (\n a.message === b.message &&\n a.range.start.line === b.range.start.line &&\n a.range.start.character === b.range.start.character &&\n a.range.end.line === b.range.end.line &&\n a.range.end.character === b.range.end.character &&\n a.severity === b.severity\n )\n}\n\nfunction isSameOrMoreRecentVersion(prev: number | undefined, next: number | undefined): boolean {\n if (prev === undefined || next === undefined) return true\n return prev <= next\n}\n\nexport class SourceFileDiagnostics {\n private diagnostics: lsp.Diagnostic[] | 'pending' = 'pending'\n private version: number | undefined\n /**\n * Update the diagnostics for this file and return a boolean indicating if they have changed\n * @param version The file version used to generate these diagnostics\n * @param diagnostics\n */\n setDiagnostics({ version, diagnostics }: { diagnostics: lsp.Diagnostic[] | 'pending'; version: number | undefined }): boolean {\n // Ignore older diagnostics (even though this shouldn't happen)\n if (!isSameOrMoreRecentVersion(this.version, version)) return false\n if (diagnostics !== 'pending' && this.diagnostics !== 'pending' && diagnostics.length === this.diagnostics.length) {\n if (zipStrict(this.diagnostics, diagnostics).every(([l, r]) => diagnosticsAreSame(l, r))) {\n this.version = version\n return false\n }\n }\n this.diagnostics = diagnostics\n this.version = version\n\n return true\n }\n}\nexport type FileWithDiagnostics = {\n uri: lsp.DocumentUri\n version: number | undefined\n diagnostics: lsp.Diagnostic[]\n}\n\ntype DiagnosticEvents = {\n fileDiagnosticsChanged: [event: FileWithDiagnostics]\n}\n\nexport class DiagnosticsManager {\n private readonly sourceFiles = new DefaultMap<lsp.DocumentUri, SourceFileDiagnostics>()\n private readonly events = new EventEmitter<DiagnosticEvents>()\n\n setDiagnostics({\n uri,\n diagnostics,\n version,\n }: {\n uri: lsp.DocumentUri\n diagnostics: lsp.Diagnostic[] | 'pending'\n version: number | undefined\n }) {\n logger.debug(\n undefined,\n `[DiagMgr] Setting diagnostics for ${uri} ${version ?? '<no version>'} (${diagnostics === 'pending' ? 'pending' : diagnostics.length})`,\n )\n const fileDiagnostics = this.sourceFiles.getOrDefault(uri, () => new SourceFileDiagnostics())\n if (fileDiagnostics.setDiagnostics({ diagnostics, version })) {\n if (diagnostics === 'pending') return\n this.events.emit('fileDiagnosticsChanged', { uri, diagnostics, version })\n }\n }\n\n onFileDiagnosticsChanged(handler: (...args: DiagnosticEvents['fileDiagnosticsChanged']) => void): lsp.Disposable {\n this.events.on('fileDiagnosticsChanged', handler)\n return {\n dispose: () => {\n this.events.off('fileDiagnosticsChanged', handler)\n },\n }\n }\n}\n","import { TextDocument } from 'vscode-languageserver-textdocument'\nimport * as lsp from 'vscode-languageserver/node'\nimport { appVersion, packageVersion } from '../cli/app-version'\nimport { Constants } from '../constants'\nimport { logger, LogLevel } from '../logger'\nimport { LanguageServerLogSink } from '../logger/sinks/language-server-log-sink'\nimport { resolvePuyaPath } from '../puya/resolve-puya-path'\nimport type { AnalyserService } from './analyser-service'\nimport { createAnalyserService } from './analyser-service'\nimport { CompileTriggerQueue } from './compile-trigger-queue'\nimport { CompileWorker } from './compile-worker'\nimport type { FileWithDiagnostics } from './diagnostics-manager'\nimport { DiagnosticsManager } from './diagnostics-manager'\nimport { isCodeFixData } from './mapping'\nimport { LogExceptions } from './util/log-exceptions'\nimport { createNormalisedTextDocumentConnection, normalisedUri } from './util/uris'\n\ninterface LanguageServerConfiguration {\n // use LogLevel member names to maintain consistency with other extension settings\n logLevel?: Omit<keyof typeof LogLevel, 'Critical'>\n debounce?: number\n}\n\nconst resolveConnection = async (lspPort: number | undefined) => {\n if (!lspPort) {\n return lsp.createConnection(lsp.ProposedFeatures.all)\n }\n\n // When the debug env variable PUYA_TS_DEBUG_LSP_PORT is set, we start the server with socket transport.\n // Note: this is actually the opposite to how vscode-languageserver is designed.\n // Normally, the extension is the web socker server and the language server is the client.\n // Here, we flip it. This allows an easier debugging experience.\n // If changes are made to the language server, you can just restart the debugger\n // and choose the option \"Restart language server\" in the VS Code extension host instance.\n const transport = await lsp.createClientSocketTransport(lspPort)\n const protocol = await transport.onConnected()\n\n return lsp.createConnection(lsp.ProposedFeatures.all, protocol[0], protocol[1])\n}\n\nexport type LanguageServerOptions = {\n port?: number\n customPuyaPath?: string\n}\n\nconst PACKAGE_VERSION = packageVersion()\n\nexport class PuyaLanguageServer {\n readonly documents = new lsp.TextDocuments(TextDocument)\n readonly triggers = new CompileTriggerQueue()\n readonly workspaceFolders: lsp.URI[] = []\n readonly diagnosticsMgr: DiagnosticsManager\n readonly compileWorker: CompileWorker\n readonly analyserService: AnalyserService\n stopping = false\n\n constructor(\n public readonly connection: lsp.Connection,\n private readonly loggingSink: LanguageServerLogSink,\n puyaPath: string,\n ) {\n this.diagnosticsMgr = new DiagnosticsManager()\n this.analyserService = createAnalyserService({ puyaPath })\n this.compileWorker = new CompileWorker(this.triggers, this.analyserService, this.documents, this.diagnosticsMgr)\n\n connection.onInitialize(this.initialize.bind(this))\n connection.onInitialized(this.initialized.bind(this))\n connection.onCodeAction(this.codeAction.bind(this))\n connection.onDidChangeConfiguration(this.configurationChange.bind(this))\n this.documents.onDidChangeContent(this.documentDidChangeContent.bind(this))\n this.diagnosticsMgr.onFileDiagnosticsChanged(this.fileDiagnosticsChanged.bind(this))\n connection.onShutdown(this.shutdown.bind(this))\n }\n\n start() {\n this.documents.listen(createNormalisedTextDocumentConnection(this.connection))\n this.connection.listen()\n this.compileWorker.start()\n }\n\n async shutdown() {\n logger.debug(undefined, '[PuyaLanguageServer] Shutting down')\n this.stopping = true\n await this.compileWorker.stop()\n await this.analyserService.shutdown()\n logger.debug(undefined, '[PuyaLanguageServer] Shutdown')\n }\n\n initialize(params: lsp.InitializeParams): lsp.InitializeResult {\n this.workspaceFolders.push(...(params.workspaceFolders?.map((f) => normalisedUri({ uri: f.uri }).toString()) ?? []))\n this.triggers.enqueue({\n type: 'workspace',\n uris: this.workspaceFolders,\n })\n return {\n serverInfo: {\n name: 'Puya-TS Language Server',\n version: PACKAGE_VERSION,\n },\n capabilities: {\n textDocumentSync: lsp.TextDocumentSyncKind.Incremental,\n codeActionProvider: {\n resolveProvider: false,\n },\n },\n }\n }\n\n @LogExceptions\n initialized(params: lsp.InitializedParams) {\n logger.debug(undefined, `${Constants.languageServerSource}-ls initialized`)\n }\n\n @LogExceptions\n async fileDiagnosticsChanged(params: FileWithDiagnostics) {\n if (this.stopping) {\n logger.debug(undefined, `[Diagnostics Ignored (shutting down)]: ${params.uri}`)\n return\n }\n logger.debug(undefined, `[Diagnostics Changed]: ${params.uri}`)\n\n await this.connection.sendDiagnostics(params)\n logger.debug(undefined, `[Diagnostics Sent]: ${params.uri}`)\n }\n\n @LogExceptions\n documentDidChangeContent(params: lsp.TextDocumentChangeEvent<TextDocument>) {\n if (this.stopping) return\n const normalizedDocumentUri = normalisedUri({ uri: params.document.uri }).toString()\n logger.debug(undefined, `[Document Changed]: ${normalizedDocumentUri}`)\n this.diagnosticsMgr.setDiagnostics({ uri: normalizedDocumentUri, version: params.document.version, diagnostics: 'pending' })\n\n this.triggers.enqueue({\n type: 'file',\n uris: [normalizedDocumentUri],\n })\n }\n\n /**\n * Bound to connection.onCodeAction and called when a user hovers over a piece of code.\n *\n * Params includes the text range the user is hovering over and any diagnostics known to the\n * client at the time.\n *\n * Response should include actions the user can take and the command or text edits that should be\n * invoked/applied if selected\n * @param params\n */\n @LogExceptions\n codeAction(params: lsp.CodeActionParams): lsp.CodeAction[] {\n return params.context.diagnostics.flatMap((d): lsp.CodeAction | lsp.CodeAction[] => {\n if (isCodeFixData(d.data)) {\n return {\n title: d.data.message,\n kind: lsp.CodeActionKind.QuickFix,\n diagnostics: [d],\n edit: {\n changes: {\n [params.textDocument.uri]: [...d.data.edits],\n },\n },\n }\n }\n return []\n })\n }\n\n @LogExceptions\n configurationChange(params: lsp.DidChangeConfigurationParams) {\n const settings = params.settings as LanguageServerConfiguration\n const logLevel = LogLevel[settings.logLevel as keyof typeof LogLevel]\n if (logLevel !== undefined) {\n logger.debug(undefined, `setting log level to ${logLevel}`)\n this.loggingSink.minLogLevel = logLevel\n }\n }\n}\n\n// eslint-disable-next-line no-console\nconst cliLog = console.error\n\nexport async function startLanguageServer(options: LanguageServerOptions) {\n cliLog(`Puya-TS Language Server:\\n${appVersion({ withAVMVersion: false })}`)\n const connection = await resolveConnection(options.port)\n const languageServerSink = new LanguageServerLogSink(connection)\n logger.configure([languageServerSink])\n try {\n const puyaPath = await resolvePuyaPath(options)\n const server = new PuyaLanguageServer(connection, languageServerSink, puyaPath)\n server.start()\n } catch (e) {\n connection.console.error(`Unhandled exception ${e}`)\n }\n}\n","import { ArgumentParser, BooleanOptionalAction } from 'argparse'\nimport { appVersion } from '../cli/app-version'\nimport { checkNodeVersion } from '../cli/check-node-version'\nimport type { LanguageServerOptions } from './puya-language-server'\nimport { startLanguageServer } from './puya-language-server'\n\nexport async function parseCliArguments() {\n checkNodeVersion()\n const prog = 'puyats-ls'\n const parser = new ArgumentParser({\n prog,\n })\n\n parser.add_argument('--version', {\n action: 'store_const',\n help: 'Show application version',\n const: 'version',\n dest: 'command',\n })\n parser.add_argument('--debug-mode', {\n help: 'Start the language server in debug mode. Server will listen on the debug port (default 4001) for connections.',\n default: false,\n dest: 'debugMode',\n action: BooleanOptionalAction,\n })\n const [result, _] = parser.parse_known_args() as [PuyaTsCommand, unknown]\n\n switch (result.command) {\n case 'version':\n /* eslint-disable-next-line no-console */\n console.log(appVersion({ name: prog }))\n break\n default: {\n const options: LanguageServerOptions = {\n port: result.debugMode ? (parsePort(process.env.PUYA_TS_DEBUG_LSP_PORT) ?? 4001) : undefined,\n }\n\n await startLanguageServer(options)\n break\n }\n }\n}\n\ntype PuyaTsCommand = NoCommandArgs | VersionCommand\ninterface NoCommandArgs {\n command: 'none'\n debugMode: boolean\n}\ninterface VersionCommand {\n command: 'version'\n}\n\nfunction parsePort(value: string | undefined) {\n if (value === undefined) return undefined\n const val = Number(value)\n if (val > 0 && val < 2 ** 16 && Math.floor(val) === val) {\n return val\n }\n throw new Error(`Invalid port number ${value}`)\n}\n","import './util/polyfills'\nimport { parseCliArguments } from './language-server/parse'\n\nvoid parseCliArguments()\n"],"names":["require$$0","lsp.createConnection","lsp.ProposedFeatures","lsp.createClientSocketTransport","lsp.TextDocuments","lsp.TextDocumentSyncKind","lsp.CodeActionKind"],"mappings":"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","x_google_ignoreList":[0,1]}
|