kopytko-formatter 1.0.9 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/config.d.ts +4 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +3 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/cst-passes/aaThreshold.d.ts +4 -0
- package/dist/src/cst-passes/aaThreshold.d.ts.map +1 -0
- package/dist/src/cst-passes/aaThreshold.js +11 -0
- package/dist/src/cst-passes/aaThreshold.js.map +1 -0
- package/dist/src/cst-passes/alignAssignments.d.ts +4 -0
- package/dist/src/cst-passes/alignAssignments.d.ts.map +1 -0
- package/dist/src/cst-passes/alignAssignments.js +11 -0
- package/dist/src/cst-passes/alignAssignments.js.map +1 -0
- package/dist/src/cst-passes/blankLines.d.ts +19 -0
- package/dist/src/cst-passes/blankLines.d.ts.map +1 -0
- package/dist/src/cst-passes/blankLines.js +40 -0
- package/dist/src/cst-passes/blankLines.js.map +1 -0
- package/dist/src/cst-passes/casingPass.d.ts +12 -0
- package/dist/src/cst-passes/casingPass.d.ts.map +1 -0
- package/dist/src/cst-passes/casingPass.js +214 -0
- package/dist/src/cst-passes/casingPass.js.map +1 -0
- package/dist/src/cst-passes/commentNormalization.d.ts +24 -0
- package/dist/src/cst-passes/commentNormalization.d.ts.map +1 -0
- package/dist/src/cst-passes/commentNormalization.js +76 -0
- package/dist/src/cst-passes/commentNormalization.js.map +1 -0
- package/dist/src/cst-passes/commentWidth.d.ts +4 -0
- package/dist/src/cst-passes/commentWidth.d.ts.map +1 -0
- package/dist/src/cst-passes/commentWidth.js +50 -0
- package/dist/src/cst-passes/commentWidth.js.map +1 -0
- package/dist/src/cst-passes/elseOnNewLine.d.ts +4 -0
- package/dist/src/cst-passes/elseOnNewLine.d.ts.map +1 -0
- package/dist/src/cst-passes/elseOnNewLine.js +11 -0
- package/dist/src/cst-passes/elseOnNewLine.js.map +1 -0
- package/dist/src/cst-passes/emptyLinesBetweenMethods.d.ts +4 -0
- package/dist/src/cst-passes/emptyLinesBetweenMethods.d.ts.map +1 -0
- package/dist/src/cst-passes/emptyLinesBetweenMethods.js +11 -0
- package/dist/src/cst-passes/emptyLinesBetweenMethods.js.map +1 -0
- package/dist/src/cst-passes/endKeywordStyle.d.ts +21 -0
- package/dist/src/cst-passes/endKeywordStyle.d.ts.map +1 -0
- package/dist/src/cst-passes/endKeywordStyle.js +95 -0
- package/dist/src/cst-passes/endKeywordStyle.js.map +1 -0
- package/dist/src/cst-passes/fieldAccessConsistency.d.ts +4 -0
- package/dist/src/cst-passes/fieldAccessConsistency.d.ts.map +1 -0
- package/dist/src/cst-passes/fieldAccessConsistency.js +11 -0
- package/dist/src/cst-passes/fieldAccessConsistency.js.map +1 -0
- package/dist/src/cst-passes/functionVsSub.d.ts +13 -0
- package/dist/src/cst-passes/functionVsSub.d.ts.map +1 -0
- package/dist/src/cst-passes/functionVsSub.js +112 -0
- package/dist/src/cst-passes/functionVsSub.js.map +1 -0
- package/dist/src/cst-passes/importSorting.d.ts +25 -0
- package/dist/src/cst-passes/importSorting.d.ts.map +1 -0
- package/dist/src/cst-passes/importSorting.js +126 -0
- package/dist/src/cst-passes/importSorting.js.map +1 -0
- package/dist/src/cst-passes/indentation.d.ts +21 -0
- package/dist/src/cst-passes/indentation.d.ts.map +1 -0
- package/dist/src/cst-passes/indentation.js +115 -0
- package/dist/src/cst-passes/indentation.js.map +1 -0
- package/dist/src/cst-passes/index.d.ts +45 -0
- package/dist/src/cst-passes/index.d.ts.map +1 -0
- package/dist/src/cst-passes/index.js +77 -0
- package/dist/src/cst-passes/index.js.map +1 -0
- package/dist/src/cst-passes/infrastructure.d.ts +39 -0
- package/dist/src/cst-passes/infrastructure.d.ts.map +1 -0
- package/dist/src/cst-passes/infrastructure.js +63 -0
- package/dist/src/cst-passes/infrastructure.js.map +1 -0
- package/dist/src/cst-passes/lineCommentPosition.d.ts +4 -0
- package/dist/src/cst-passes/lineCommentPosition.d.ts.map +1 -0
- package/dist/src/cst-passes/lineCommentPosition.js +42 -0
- package/dist/src/cst-passes/lineCommentPosition.js.map +1 -0
- package/dist/src/cst-passes/mPrefixStyle.d.ts +4 -0
- package/dist/src/cst-passes/mPrefixStyle.d.ts.map +1 -0
- package/dist/src/cst-passes/mPrefixStyle.js +11 -0
- package/dist/src/cst-passes/mPrefixStyle.js.map +1 -0
- package/dist/src/cst-passes/observeFieldStyle.d.ts +6 -0
- package/dist/src/cst-passes/observeFieldStyle.d.ts.map +1 -0
- package/dist/src/cst-passes/observeFieldStyle.js +21 -0
- package/dist/src/cst-passes/observeFieldStyle.js.map +1 -0
- package/dist/src/cst-passes/paramAlignment.d.ts +4 -0
- package/dist/src/cst-passes/paramAlignment.d.ts.map +1 -0
- package/dist/src/cst-passes/paramAlignment.js +11 -0
- package/dist/src/cst-passes/paramAlignment.js.map +1 -0
- package/dist/src/cst-passes/parenthesisIfCase.d.ts +6 -0
- package/dist/src/cst-passes/parenthesisIfCase.d.ts.map +1 -0
- package/dist/src/cst-passes/parenthesisIfCase.js +42 -0
- package/dist/src/cst-passes/parenthesisIfCase.js.map +1 -0
- package/dist/src/cst-passes/printStatementRemoval.d.ts +20 -0
- package/dist/src/cst-passes/printStatementRemoval.d.ts.map +1 -0
- package/dist/src/cst-passes/printStatementRemoval.js +67 -0
- package/dist/src/cst-passes/printStatementRemoval.js.map +1 -0
- package/dist/src/cst-passes/spacing.d.ts +19 -0
- package/dist/src/cst-passes/spacing.d.ts.map +1 -0
- package/dist/src/cst-passes/spacing.js +81 -0
- package/dist/src/cst-passes/spacing.js.map +1 -0
- package/dist/src/cst-passes/splitArrayOpenBracket.d.ts +4 -0
- package/dist/src/cst-passes/splitArrayOpenBracket.d.ts.map +1 -0
- package/dist/src/cst-passes/splitArrayOpenBracket.js +11 -0
- package/dist/src/cst-passes/splitArrayOpenBracket.js.map +1 -0
- package/dist/src/cst-passes/stringConcatStyle.d.ts +4 -0
- package/dist/src/cst-passes/stringConcatStyle.d.ts.map +1 -0
- package/dist/src/cst-passes/stringConcatStyle.js +11 -0
- package/dist/src/cst-passes/stringConcatStyle.js.map +1 -0
- package/dist/src/cst-passes/stripCatchParens.d.ts +4 -0
- package/dist/src/cst-passes/stripCatchParens.d.ts.map +1 -0
- package/dist/src/cst-passes/stripCatchParens.js +29 -0
- package/dist/src/cst-passes/stripCatchParens.js.map +1 -0
- package/dist/src/cst-passes/thenStyle.d.ts +15 -0
- package/dist/src/cst-passes/thenStyle.d.ts.map +1 -0
- package/dist/src/cst-passes/thenStyle.js +140 -0
- package/dist/src/cst-passes/thenStyle.js.map +1 -0
- package/dist/src/cst-passes/trailingCommas.d.ts +13 -0
- package/dist/src/cst-passes/trailingCommas.d.ts.map +1 -0
- package/dist/src/cst-passes/trailingCommas.js +56 -0
- package/dist/src/cst-passes/trailingCommas.js.map +1 -0
- package/dist/src/cst-passes/trailingWhitespace.d.ts +13 -0
- package/dist/src/cst-passes/trailingWhitespace.d.ts.map +1 -0
- package/dist/src/cst-passes/trailingWhitespace.js +26 -0
- package/dist/src/cst-passes/trailingWhitespace.js.map +1 -0
- package/dist/src/cst-passes/wrapLongStrings.d.ts +4 -0
- package/dist/src/cst-passes/wrapLongStrings.d.ts.map +1 -0
- package/dist/src/cst-passes/wrapLongStrings.js +11 -0
- package/dist/src/cst-passes/wrapLongStrings.js.map +1 -0
- package/dist/src/formatter.d.ts +2 -1
- package/dist/src/formatter.d.ts.map +1 -1
- package/dist/src/formatter.js +74 -333
- package/dist/src/formatter.js.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +11 -10
- package/dist/src/index.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CST Pass: Spacing normalization.
|
|
4
|
+
*
|
|
5
|
+
* Enforces consistent spacing around operators, assignments, and parentheses.
|
|
6
|
+
* Works on the whitespace trivia between tokens.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.spacingPass = spacingPass;
|
|
10
|
+
const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
|
|
11
|
+
const BINARY_OPS = new Set([
|
|
12
|
+
kopytko_brightscript_parser_1.TokenKind.Plus, kopytko_brightscript_parser_1.TokenKind.Minus, kopytko_brightscript_parser_1.TokenKind.Star, kopytko_brightscript_parser_1.TokenKind.Slash,
|
|
13
|
+
kopytko_brightscript_parser_1.TokenKind.Backslash, kopytko_brightscript_parser_1.TokenKind.Caret, kopytko_brightscript_parser_1.TokenKind.Mod,
|
|
14
|
+
kopytko_brightscript_parser_1.TokenKind.And, kopytko_brightscript_parser_1.TokenKind.Or,
|
|
15
|
+
kopytko_brightscript_parser_1.TokenKind.Less, kopytko_brightscript_parser_1.TokenKind.Greater, kopytko_brightscript_parser_1.TokenKind.LessEqual, kopytko_brightscript_parser_1.TokenKind.GreaterEqual,
|
|
16
|
+
kopytko_brightscript_parser_1.TokenKind.LessGreater, kopytko_brightscript_parser_1.TokenKind.LeftShift, kopytko_brightscript_parser_1.TokenKind.RightShift,
|
|
17
|
+
]);
|
|
18
|
+
const ASSIGNMENT_OPS = new Set([
|
|
19
|
+
kopytko_brightscript_parser_1.TokenKind.Equal,
|
|
20
|
+
kopytko_brightscript_parser_1.TokenKind.PlusEqual, kopytko_brightscript_parser_1.TokenKind.MinusEqual,
|
|
21
|
+
kopytko_brightscript_parser_1.TokenKind.StarEqual, kopytko_brightscript_parser_1.TokenKind.SlashEqual,
|
|
22
|
+
kopytko_brightscript_parser_1.TokenKind.BackslashEqual,
|
|
23
|
+
kopytko_brightscript_parser_1.TokenKind.LeftShiftEqual, kopytko_brightscript_parser_1.TokenKind.RightShiftEqual,
|
|
24
|
+
]);
|
|
25
|
+
/**
|
|
26
|
+
* Creates a spacing pass that normalizes whitespace around operators.
|
|
27
|
+
* This is a simplified version — handles the most common cases.
|
|
28
|
+
*/
|
|
29
|
+
function spacingPass(config) {
|
|
30
|
+
if (!config.spaceAroundOperators && !config.spaceAroundAssignment)
|
|
31
|
+
return () => [];
|
|
32
|
+
return (root, source) => {
|
|
33
|
+
const edits = [];
|
|
34
|
+
const tokens = collectAllTokens(root);
|
|
35
|
+
for (let i = 0; i < tokens.length - 1; i++) {
|
|
36
|
+
const token = tokens[i];
|
|
37
|
+
const next = tokens[i + 1];
|
|
38
|
+
// Skip if tokens are on different lines
|
|
39
|
+
if (next.line !== token.line)
|
|
40
|
+
continue;
|
|
41
|
+
if (config.spaceAroundOperators && BINARY_OPS.has(token.kind)) {
|
|
42
|
+
ensureSpaceBefore(token, source, edits);
|
|
43
|
+
ensureSpaceAfter(token, next, source, edits);
|
|
44
|
+
}
|
|
45
|
+
if (config.spaceAroundAssignment && ASSIGNMENT_OPS.has(token.kind)) {
|
|
46
|
+
ensureSpaceBefore(token, source, edits);
|
|
47
|
+
ensureSpaceAfter(token, next, source, edits);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return edits;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function ensureSpaceBefore(token, source, edits) {
|
|
54
|
+
if (token.pos === 0)
|
|
55
|
+
return;
|
|
56
|
+
const charBefore = source[token.pos - 1];
|
|
57
|
+
if (charBefore !== ' ' && charBefore !== '\t' && charBefore !== '\n' && charBefore !== '\r') {
|
|
58
|
+
edits.push({ pos: token.pos, end: token.pos, newText: ' ' });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function ensureSpaceAfter(token, next, source, edits) {
|
|
62
|
+
const gap = source.slice(token.end, next.pos);
|
|
63
|
+
// Check leading trivia of next token for whitespace
|
|
64
|
+
if (next.leadingTrivia.length === 0 && gap === '') {
|
|
65
|
+
edits.push({ pos: token.end, end: token.end, newText: ' ' });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function collectAllTokens(node) {
|
|
69
|
+
const tokens = [];
|
|
70
|
+
function walk(n) {
|
|
71
|
+
for (const child of n.children) {
|
|
72
|
+
if ((0, kopytko_brightscript_parser_1.isToken)(child))
|
|
73
|
+
tokens.push(child);
|
|
74
|
+
else if ((0, kopytko_brightscript_parser_1.isNode)(child))
|
|
75
|
+
walk(child);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
walk(node);
|
|
79
|
+
return tokens;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=spacing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spacing.js","sourceRoot":"","sources":["../../../src/cst-passes/spacing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SyntaxNode } from 'kopytko-brightscript-parser';
|
|
2
|
+
import { TextEdit } from './infrastructure';
|
|
3
|
+
export declare function splitArrayOpenBracketPass(enabled: boolean): (root: SyntaxNode, source: string) => TextEdit[];
|
|
4
|
+
//# sourceMappingURL=splitArrayOpenBracket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splitArrayOpenBracket.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/splitArrayOpenBracket.ts"],"names":[],"mappings":"AAAsD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAK5G"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.splitArrayOpenBracketPass = splitArrayOpenBracketPass;
|
|
4
|
+
function splitArrayOpenBracketPass(enabled) {
|
|
5
|
+
if (!enabled)
|
|
6
|
+
return () => [];
|
|
7
|
+
return (_root, _source) => {
|
|
8
|
+
return [];
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=splitArrayOpenBracket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splitArrayOpenBracket.js","sourceRoot":"","sources":["../../../src/cst-passes/splitArrayOpenBracket.ts"],"names":[],"mappings":";;AAGA,8DAKC;AALD,SAAgB,yBAAyB,CAAC,OAAgB;IACxD,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,KAAiB,EAAE,OAAe,EAAc,EAAE;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringConcatStyle.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/stringConcatStyle.ts"],"names":[],"mappings":"AAAsD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAKrG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stringConcatStylePass = stringConcatStylePass;
|
|
4
|
+
function stringConcatStylePass(style) {
|
|
5
|
+
if (style === 'preserve')
|
|
6
|
+
return () => [];
|
|
7
|
+
return (_root, _source) => {
|
|
8
|
+
return [];
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=stringConcatStyle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringConcatStyle.js","sourceRoot":"","sources":["../../../src/cst-passes/stringConcatStyle.ts"],"names":[],"mappings":";;AAGA,sDAKC;AALD,SAAgB,qBAAqB,CAAC,KAAa;IACjD,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;IAC1C,OAAO,CAAC,KAAiB,EAAE,OAAe,EAAc,EAAE;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripCatchParens.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/stripCatchParens.ts"],"names":[],"mappings":"AAAsD,OAAO,EAAE,UAAU,EAA0C,MAAM,6BAA6B,CAAC;AACvJ,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,oBAAoB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAoBvF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stripCatchParensPass = stripCatchParensPass;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */ const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
|
|
5
|
+
function stripCatchParensPass() {
|
|
6
|
+
return (root, source) => {
|
|
7
|
+
const edits = [];
|
|
8
|
+
function visit(node) {
|
|
9
|
+
if (node.kind === kopytko_brightscript_parser_1.SyntaxKind.CatchClause) {
|
|
10
|
+
const tokens = node.childTokens;
|
|
11
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
12
|
+
if (tokens[i].kind === kopytko_brightscript_parser_1.TokenKind.LeftParen) {
|
|
13
|
+
edits.push({ pos: tokens[i].pos, end: tokens[i].end, newText: '' });
|
|
14
|
+
}
|
|
15
|
+
if (tokens[i].kind === kopytko_brightscript_parser_1.TokenKind.RightParen) {
|
|
16
|
+
edits.push({ pos: tokens[i].pos, end: tokens[i].end, newText: '' });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
for (const child of node.children) {
|
|
21
|
+
if ((0, kopytko_brightscript_parser_1.isNode)(child))
|
|
22
|
+
visit(child);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
visit(root);
|
|
26
|
+
return edits;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=stripCatchParens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripCatchParens.js","sourceRoot":"","sources":["../../../src/cst-passes/stripCatchParens.ts"],"names":[],"mappings":";;AAGA,oDAoBC;AAvBD,sDAAsD,CAAA,6EAAiG;AAGvJ,SAAgB,oBAAoB;IAClC,OAAO,CAAC,IAAgB,EAAE,MAAc,EAAc,EAAE;QACtD,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,SAAS,KAAK,CAAC,IAAgB;YAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,wCAAU,CAAC,WAAW,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,uCAAS,CAAC,SAAS,EAAE,CAAC;wBAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;oBACtE,CAAC;oBACD,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,uCAAS,CAAC,UAAU,EAAE,CAAC;wBAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,IAAI,IAAA,oCAAM,EAAC,KAAK,CAAC;oBAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;QACzE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CST Pass: Then style.
|
|
3
|
+
*
|
|
4
|
+
* Controls the presence of `then` keyword after `if`/`else if` conditions:
|
|
5
|
+
* - 'always': add `then` if missing
|
|
6
|
+
* - 'never': remove `then` from multi-line ifs (keep on single-line)
|
|
7
|
+
* - 'multiline-only': add `then` only on multi-line ifs
|
|
8
|
+
* - 'singleline-only': remove `then` from multi-line ifs, keep on single-line
|
|
9
|
+
*/
|
|
10
|
+
import { SyntaxNode } from 'kopytko-brightscript-parser';
|
|
11
|
+
import { TextEdit } from './infrastructure';
|
|
12
|
+
type ThenStyle = 'always' | 'never' | 'multiline-only' | 'singleline-only' | 'preserve';
|
|
13
|
+
export declare function thenStylePass(style: ThenStyle): (root: SyntaxNode, source: string) => TextEdit[];
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=thenStyle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thenStyle.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/thenStyle.ts"],"names":[],"mappings":"CAAsD;;;;;;;;GAQnD;AAEH,OAAO,EAAE,UAAU,EAA0C,MAAM,6BAA6B,CAAC;AAEjG,OAAO,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAC;AAExD,KAAK,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAExF,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAkBhG"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */ /**
|
|
3
|
+
* CST Pass: Then style.
|
|
4
|
+
*
|
|
5
|
+
* Controls the presence of `then` keyword after `if`/`else if` conditions:
|
|
6
|
+
* - 'always': add `then` if missing
|
|
7
|
+
* - 'never': remove `then` from multi-line ifs (keep on single-line)
|
|
8
|
+
* - 'multiline-only': add `then` only on multi-line ifs
|
|
9
|
+
* - 'singleline-only': remove `then` from multi-line ifs, keep on single-line
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.thenStylePass = thenStylePass;
|
|
13
|
+
const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
|
|
14
|
+
function thenStylePass(style) {
|
|
15
|
+
if (style === 'preserve')
|
|
16
|
+
return () => [];
|
|
17
|
+
return (root, source) => {
|
|
18
|
+
const edits = [];
|
|
19
|
+
function visitNode(node) {
|
|
20
|
+
if (node.kind === kopytko_brightscript_parser_1.SyntaxKind.IfStatement || node.kind === kopytko_brightscript_parser_1.SyntaxKind.ElseIfClause) {
|
|
21
|
+
processIfNode(node, edits, style, source);
|
|
22
|
+
}
|
|
23
|
+
for (const child of node.children) {
|
|
24
|
+
if ((0, kopytko_brightscript_parser_1.isNode)(child))
|
|
25
|
+
visitNode(child);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
visitNode(root);
|
|
29
|
+
return edits;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function processIfNode(node, edits, style, source) {
|
|
33
|
+
const thenToken = node.findToken(kopytko_brightscript_parser_1.TokenKind.Then);
|
|
34
|
+
const hasThen = thenToken !== undefined;
|
|
35
|
+
// Detect single-line: if there's a `then` token AND the next statement after
|
|
36
|
+
// `then` is on the SAME line as `then`, it's a single-line if.
|
|
37
|
+
// Single-line: `if x then return y` (no end if needed)
|
|
38
|
+
// Multi-line: `if x then\n ...\nend if`
|
|
39
|
+
let isSingleLine = false;
|
|
40
|
+
if (hasThen) {
|
|
41
|
+
// Check if there's code after 'then' on the same line
|
|
42
|
+
const thenLine = thenToken.line;
|
|
43
|
+
const children = node.children;
|
|
44
|
+
const thenIdx = children.indexOf(thenToken);
|
|
45
|
+
if (thenIdx >= 0) {
|
|
46
|
+
for (let i = thenIdx + 1; i < children.length; i++) {
|
|
47
|
+
const c = children[i];
|
|
48
|
+
if ('line' in c && c.line === thenLine) {
|
|
49
|
+
isSingleLine = true;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
if ('children' in c) {
|
|
53
|
+
const firstToken = findFirstTokenInNode(c);
|
|
54
|
+
if (firstToken && firstToken.line === thenLine) {
|
|
55
|
+
isSingleLine = true;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
switch (style) {
|
|
64
|
+
case 'always':
|
|
65
|
+
if (!hasThen) {
|
|
66
|
+
// Find the position right before the body starts — after condition
|
|
67
|
+
const insertPos = findThenInsertPosition(node);
|
|
68
|
+
if (insertPos >= 0) {
|
|
69
|
+
edits.push({ pos: insertPos, end: insertPos, newText: ' then' });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
break;
|
|
73
|
+
case 'never':
|
|
74
|
+
if (hasThen && !isSingleLine) {
|
|
75
|
+
removeThen(thenToken, edits, source);
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
case 'multiline-only':
|
|
79
|
+
if (!hasThen && !isSingleLine) {
|
|
80
|
+
const insertPos = findThenInsertPosition(node);
|
|
81
|
+
if (insertPos >= 0) {
|
|
82
|
+
edits.push({ pos: insertPos, end: insertPos, newText: ' then' });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
break;
|
|
86
|
+
case 'singleline-only':
|
|
87
|
+
if (hasThen && !isSingleLine) {
|
|
88
|
+
removeThen(thenToken, edits, source);
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function removeThen(token, edits, source) {
|
|
94
|
+
// Remove the 'then' token and the preceding space
|
|
95
|
+
let start = token.leadingTrivia.length > 0
|
|
96
|
+
? token.leadingTrivia[0].pos
|
|
97
|
+
: token.pos;
|
|
98
|
+
// Also consume one space before 'then' to avoid double spacing
|
|
99
|
+
if (start > 0 && (source[start - 1] === ' ' || source[start - 1] === '\t')) {
|
|
100
|
+
start--;
|
|
101
|
+
}
|
|
102
|
+
edits.push({ pos: start, end: token.end, newText: '' });
|
|
103
|
+
}
|
|
104
|
+
function findThenInsertPosition(node) {
|
|
105
|
+
// Find the last token before the body (after the condition expression)
|
|
106
|
+
// For if: the condition is between `if` keyword and the body/then
|
|
107
|
+
// We want to insert after the last condition token
|
|
108
|
+
let lastConditionEnd = -1;
|
|
109
|
+
let foundIf = false;
|
|
110
|
+
for (const child of node.children) {
|
|
111
|
+
if ((0, kopytko_brightscript_parser_1.isToken)(child)) {
|
|
112
|
+
if (child.kind === kopytko_brightscript_parser_1.TokenKind.If || child.kind === kopytko_brightscript_parser_1.TokenKind.ElseIf) {
|
|
113
|
+
foundIf = true;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (foundIf && child.kind !== kopytko_brightscript_parser_1.TokenKind.Then) {
|
|
117
|
+
lastConditionEnd = child.end;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if ((0, kopytko_brightscript_parser_1.isNode)(child) && foundIf) {
|
|
121
|
+
// First child node after if keyword is the condition expression
|
|
122
|
+
lastConditionEnd = child.end;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return lastConditionEnd;
|
|
127
|
+
}
|
|
128
|
+
function findFirstTokenInNode(node) {
|
|
129
|
+
for (const child of node.children) {
|
|
130
|
+
if ((0, kopytko_brightscript_parser_1.isToken)(child))
|
|
131
|
+
return child;
|
|
132
|
+
if ((0, kopytko_brightscript_parser_1.isNode)(child)) {
|
|
133
|
+
const found = findFirstTokenInNode(child);
|
|
134
|
+
if (found)
|
|
135
|
+
return found;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=thenStyle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thenStyle.js","sourceRoot":"","sources":["../../../src/cst-passes/thenStyle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CST Pass: Trailing commas.
|
|
3
|
+
*
|
|
4
|
+
* Controls trailing commas in array and AA literals:
|
|
5
|
+
* - 'always': add trailing comma after last element
|
|
6
|
+
* - 'never': remove trailing comma after last element
|
|
7
|
+
*/
|
|
8
|
+
import { SyntaxNode } from 'kopytko-brightscript-parser';
|
|
9
|
+
import { TextEdit } from './infrastructure';
|
|
10
|
+
type TrailingCommaStyle = 'always' | 'never' | 'preserve';
|
|
11
|
+
export declare function trailingCommaPass(style: TrailingCommaStyle): (root: SyntaxNode, source: string) => TextEdit[];
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=trailingCommas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trailingCommas.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/trailingCommas.ts"],"names":[],"mappings":"CAAsD;;;;;;GAMnD;AAEH,OAAO,EAAE,UAAU,EAA0C,MAAM,6BAA6B,CAAC;AAEjG,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,KAAK,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAkB7G"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */ /**
|
|
3
|
+
* CST Pass: Trailing commas.
|
|
4
|
+
*
|
|
5
|
+
* Controls trailing commas in array and AA literals:
|
|
6
|
+
* - 'always': add trailing comma after last element
|
|
7
|
+
* - 'never': remove trailing comma after last element
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.trailingCommaPass = trailingCommaPass;
|
|
11
|
+
const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
|
|
12
|
+
function trailingCommaPass(style) {
|
|
13
|
+
if (style === 'preserve')
|
|
14
|
+
return () => [];
|
|
15
|
+
return (root, _source) => {
|
|
16
|
+
const edits = [];
|
|
17
|
+
function visit(node) {
|
|
18
|
+
if (node.kind === kopytko_brightscript_parser_1.SyntaxKind.ArrayLiteral || node.kind === kopytko_brightscript_parser_1.SyntaxKind.AALiteral) {
|
|
19
|
+
processLiteral(node, edits, style);
|
|
20
|
+
}
|
|
21
|
+
for (const child of node.children) {
|
|
22
|
+
if ((0, kopytko_brightscript_parser_1.isNode)(child))
|
|
23
|
+
visit(child);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
visit(root);
|
|
27
|
+
return edits;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function processLiteral(node, edits, style) {
|
|
31
|
+
const closingKind = node.kind === kopytko_brightscript_parser_1.SyntaxKind.ArrayLiteral ? kopytko_brightscript_parser_1.TokenKind.RightBracket : kopytko_brightscript_parser_1.TokenKind.RightBrace;
|
|
32
|
+
// Find the last significant token before the closing bracket/brace
|
|
33
|
+
const tokens = node.childTokens;
|
|
34
|
+
const closingIdx = tokens.findIndex(t => t.kind === closingKind);
|
|
35
|
+
if (closingIdx <= 0)
|
|
36
|
+
return;
|
|
37
|
+
// Check if it's multi-line (opening and closing on different lines)
|
|
38
|
+
const openToken = tokens[0];
|
|
39
|
+
const closeToken = tokens[closingIdx];
|
|
40
|
+
if (openToken.line === closeToken.line)
|
|
41
|
+
return; // single-line — don't touch
|
|
42
|
+
// Find the last token before closing (could be a comma or a value)
|
|
43
|
+
const prevToken = tokens[closingIdx - 1];
|
|
44
|
+
if (!prevToken)
|
|
45
|
+
return;
|
|
46
|
+
const hasTrailingComma = prevToken.kind === kopytko_brightscript_parser_1.TokenKind.Comma;
|
|
47
|
+
if (style === 'always' && !hasTrailingComma) {
|
|
48
|
+
// Insert comma after last element
|
|
49
|
+
edits.push({ pos: prevToken.end, end: prevToken.end, newText: ',' });
|
|
50
|
+
}
|
|
51
|
+
else if (style === 'never' && hasTrailingComma) {
|
|
52
|
+
// Remove trailing comma
|
|
53
|
+
edits.push({ pos: prevToken.pos, end: prevToken.end, newText: '' });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=trailingCommas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trailingCommas.js","sourceRoot":"","sources":["../../../src/cst-passes/trailingCommas.ts"],"names":[],"mappings":";AAAA,sDAAsD,CAAA;;;;;;GAMnD;;AAQH,8CAkBC;AAxBD,6EAAiG;AAMjG,SAAgB,iBAAiB,CAAC,KAAyB;IACzD,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;IAE1C,OAAO,CAAC,IAAgB,EAAE,OAAe,EAAc,EAAE;QACvD,MAAM,KAAK,GAAe,EAAE,CAAC;QAE7B,SAAS,KAAK,CAAC,IAAgB;YAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,wCAAU,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,wCAAU,CAAC,SAAS,EAAE,CAAC;gBAChF,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,IAAA,oCAAM,EAAC,KAAK,CAAC;oBAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB,EAAE,KAAiB,EAAE,KAAyB;IACpF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,wCAAU,CAAC,YAAY,CAAC,CAAC,CAAC,uCAAS,CAAC,YAAY,CAAC,CAAC,CAAC,uCAAS,CAAC,UAAU,CAAC;IAE1G,mEAAmE;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;IAChC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IACjE,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO;IAE5B,oEAAoE;IACpE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI;QAAE,OAAO,CAAC,4BAA4B;IAE5E,mEAAmE;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,KAAK,uCAAS,CAAC,KAAK,CAAC;IAE5D,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5C,kCAAkC;QAClC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,KAAK,KAAK,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACjD,wBAAwB;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CST Pass: Trailing whitespace removal.
|
|
3
|
+
*
|
|
4
|
+
* Removes trailing spaces/tabs from the end of lines.
|
|
5
|
+
* Works on whitespace trivia that appears before a LineBreak trivia.
|
|
6
|
+
*/
|
|
7
|
+
import { SyntaxNode } from 'kopytko-brightscript-parser';
|
|
8
|
+
import { TextEdit } from './infrastructure';
|
|
9
|
+
/**
|
|
10
|
+
* Creates a trailing-whitespace-removal pass.
|
|
11
|
+
*/
|
|
12
|
+
export declare function trailingWhitespacePass(): (root: SyntaxNode, source: string) => TextEdit[];
|
|
13
|
+
//# sourceMappingURL=trailingWhitespace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trailingWhitespace.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/trailingWhitespace.ts"],"names":[],"mappings":"CAAsD;;;;;GAKnD;AAEH,OAAO,EAAE,UAAU,EAA+B,MAAM,6BAA6B,CAAC;AAEtF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAYzF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */ /**
|
|
3
|
+
* CST Pass: Trailing whitespace removal.
|
|
4
|
+
*
|
|
5
|
+
* Removes trailing spaces/tabs from the end of lines.
|
|
6
|
+
* Works on whitespace trivia that appears before a LineBreak trivia.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.trailingWhitespacePass = trailingWhitespacePass;
|
|
10
|
+
/**
|
|
11
|
+
* Creates a trailing-whitespace-removal pass.
|
|
12
|
+
*/
|
|
13
|
+
function trailingWhitespacePass() {
|
|
14
|
+
return (_root, source) => {
|
|
15
|
+
const edits = [];
|
|
16
|
+
// Simple approach: find all trailing whitespace before newlines in the source
|
|
17
|
+
const trailingRe = /[ \t]+(?=\r?\n|$)/g;
|
|
18
|
+
let match;
|
|
19
|
+
while ((match = trailingRe.exec(source)) !== null) {
|
|
20
|
+
// Don't trim if it's the only content (empty lines are handled by blank line rules)
|
|
21
|
+
edits.push({ pos: match.index, end: match.index + match[0].length, newText: '' });
|
|
22
|
+
}
|
|
23
|
+
return edits;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=trailingWhitespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trailingWhitespace.js","sourceRoot":"","sources":["../../../src/cst-passes/trailingWhitespace.ts"],"names":[],"mappings":";AAAA,sDAAsD,CAAA;;;;;GAKnD;;AASH,wDAYC;AAfD;;GAEG;AACH,SAAgB,sBAAsB;IACpC,OAAO,CAAC,KAAiB,EAAE,MAAc,EAAc,EAAE;QACvD,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,8EAA8E;QAC9E,MAAM,UAAU,GAAG,oBAAoB,CAAC;QACxC,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAClD,oFAAoF;YACpF,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SyntaxNode } from 'kopytko-brightscript-parser';
|
|
2
|
+
import { TextEdit } from './infrastructure';
|
|
3
|
+
export declare function wrapLongStringsPass(style: string, maxLength: number): (root: SyntaxNode, source: string) => TextEdit[];
|
|
4
|
+
//# sourceMappingURL=wrapLongStrings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapLongStrings.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/wrapLongStrings.ts"],"names":[],"mappings":"AAAsD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAKtH"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapLongStringsPass = wrapLongStringsPass;
|
|
4
|
+
function wrapLongStringsPass(style, maxLength) {
|
|
5
|
+
if (style === 'preserve' || maxLength <= 0)
|
|
6
|
+
return () => [];
|
|
7
|
+
return (_root, _source) => {
|
|
8
|
+
return [];
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=wrapLongStrings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapLongStrings.js","sourceRoot":"","sources":["../../../src/cst-passes/wrapLongStrings.ts"],"names":[],"mappings":";;AAGA,kDAKC;AALD,SAAgB,mBAAmB,CAAC,KAAa,EAAE,SAAiB;IAClE,IAAI,KAAK,KAAK,UAAU,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;IAC5D,OAAO,CAAC,KAAiB,EAAE,OAAe,EAAc,EAAE;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/src/formatter.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { CasingConfig } from '
|
|
1
|
+
import { CasingConfig } from 'kopytko-brightscript-parser';
|
|
2
2
|
import { FunctionDefinition } from './types';
|
|
3
3
|
import { FormattingConfig } from './config';
|
|
4
|
+
/** Reverse mapping: spaced form → compact. */
|
|
4
5
|
/**
|
|
5
6
|
* Formats BrightScript source code using an 11-pass engine.
|
|
6
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAyB,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAc5C,8CAA8C;AAE9C;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,MAAM,GAAE,YAAoC,EAC5C,aAAa,GAAE,kBAAkB,EAAO,GACvC,MAAM,CAmHR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,MAAM,CAAC,EAAE,YAAY,EACrB,aAAa,CAAC,EAAE,kBAAkB,EAAE,GACnC,OAAO,CAET"}
|