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 @@
|
|
|
1
|
+
{"version":3,"file":"indentation.js","sourceRoot":"","sources":["../../../src/cst-passes/indentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CST-based formatting passes.
|
|
3
|
+
*
|
|
4
|
+
* These passes demonstrate the pattern for migrating regex-based formatting
|
|
5
|
+
* to structure-aware CST transformations. Each pass:
|
|
6
|
+
* 1. Walks the CST to find tokens/nodes matching certain criteria
|
|
7
|
+
* 2. Produces a list of TextEdits (position-based replacements)
|
|
8
|
+
* 3. Edits are applied to produce the transformed source
|
|
9
|
+
*
|
|
10
|
+
* Advantages over regex passes:
|
|
11
|
+
* - Cannot modify text inside string literals (tokens are pre-classified)
|
|
12
|
+
* - Cannot confuse keywords in different contexts (structural awareness)
|
|
13
|
+
* - Position-accurate (no line-splitting heuristics)
|
|
14
|
+
* - Testable in isolation (each pass is a pure function)
|
|
15
|
+
*/
|
|
16
|
+
export { applyEdits, runCstPasses, walkTokens } from './infrastructure';
|
|
17
|
+
export type { TextEdit, CstPass } from './infrastructure';
|
|
18
|
+
export { endKeywordStylePass } from './endKeywordStyle';
|
|
19
|
+
export { casingPass } from './casingPass';
|
|
20
|
+
export { commentNormalizationPass } from './commentNormalization';
|
|
21
|
+
export { printStatementRemovalPass } from './printStatementRemoval';
|
|
22
|
+
export { importSortingPass } from './importSorting';
|
|
23
|
+
export { trailingWhitespacePass } from './trailingWhitespace';
|
|
24
|
+
export { thenStylePass } from './thenStyle';
|
|
25
|
+
export { functionVsSubPass } from './functionVsSub';
|
|
26
|
+
export { blankLinePass } from './blankLines';
|
|
27
|
+
export { spacingPass } from './spacing';
|
|
28
|
+
export { indentationPass } from './indentation';
|
|
29
|
+
export { trailingCommaPass } from './trailingCommas';
|
|
30
|
+
export { stripCatchParensPass } from './stripCatchParens';
|
|
31
|
+
export { parenthesisIfCasePass } from './parenthesisIfCase';
|
|
32
|
+
export { lineCommentPositionPass } from './lineCommentPosition';
|
|
33
|
+
export { observeFieldStylePass } from './observeFieldStyle';
|
|
34
|
+
export { commentWidthPass } from './commentWidth';
|
|
35
|
+
export { elseOnNewLinePass } from './elseOnNewLine';
|
|
36
|
+
export { splitArrayOpenBracketPass } from './splitArrayOpenBracket';
|
|
37
|
+
export { alignAssignmentsPass } from './alignAssignments';
|
|
38
|
+
export { emptyLinesBetweenMethodsPass } from './emptyLinesBetweenMethods';
|
|
39
|
+
export { mPrefixStylePass } from './mPrefixStyle';
|
|
40
|
+
export { fieldAccessConsistencyPass } from './fieldAccessConsistency';
|
|
41
|
+
export { wrapLongStringsPass } from './wrapLongStrings';
|
|
42
|
+
export { stringConcatStylePass } from './stringConcatStyle';
|
|
43
|
+
export { aaThresholdPass } from './aaThreshold';
|
|
44
|
+
export { paramAlignmentPass } from './paramAlignment';
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CST-based formatting passes.
|
|
4
|
+
*
|
|
5
|
+
* These passes demonstrate the pattern for migrating regex-based formatting
|
|
6
|
+
* to structure-aware CST transformations. Each pass:
|
|
7
|
+
* 1. Walks the CST to find tokens/nodes matching certain criteria
|
|
8
|
+
* 2. Produces a list of TextEdits (position-based replacements)
|
|
9
|
+
* 3. Edits are applied to produce the transformed source
|
|
10
|
+
*
|
|
11
|
+
* Advantages over regex passes:
|
|
12
|
+
* - Cannot modify text inside string literals (tokens are pre-classified)
|
|
13
|
+
* - Cannot confuse keywords in different contexts (structural awareness)
|
|
14
|
+
* - Position-accurate (no line-splitting heuristics)
|
|
15
|
+
* - Testable in isolation (each pass is a pure function)
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.paramAlignmentPass = exports.aaThresholdPass = exports.stringConcatStylePass = exports.wrapLongStringsPass = exports.fieldAccessConsistencyPass = exports.mPrefixStylePass = exports.emptyLinesBetweenMethodsPass = exports.alignAssignmentsPass = exports.splitArrayOpenBracketPass = exports.elseOnNewLinePass = exports.commentWidthPass = exports.observeFieldStylePass = exports.lineCommentPositionPass = exports.parenthesisIfCasePass = exports.stripCatchParensPass = exports.trailingCommaPass = exports.indentationPass = exports.spacingPass = exports.blankLinePass = exports.functionVsSubPass = exports.thenStylePass = exports.trailingWhitespacePass = exports.importSortingPass = exports.printStatementRemovalPass = exports.commentNormalizationPass = exports.casingPass = exports.endKeywordStylePass = exports.walkTokens = exports.runCstPasses = exports.applyEdits = void 0;
|
|
19
|
+
var infrastructure_1 = require("./infrastructure");
|
|
20
|
+
Object.defineProperty(exports, "applyEdits", { enumerable: true, get: function () { return infrastructure_1.applyEdits; } });
|
|
21
|
+
Object.defineProperty(exports, "runCstPasses", { enumerable: true, get: function () { return infrastructure_1.runCstPasses; } });
|
|
22
|
+
Object.defineProperty(exports, "walkTokens", { enumerable: true, get: function () { return infrastructure_1.walkTokens; } });
|
|
23
|
+
var endKeywordStyle_1 = require("./endKeywordStyle");
|
|
24
|
+
Object.defineProperty(exports, "endKeywordStylePass", { enumerable: true, get: function () { return endKeywordStyle_1.endKeywordStylePass; } });
|
|
25
|
+
var casingPass_1 = require("./casingPass");
|
|
26
|
+
Object.defineProperty(exports, "casingPass", { enumerable: true, get: function () { return casingPass_1.casingPass; } });
|
|
27
|
+
var commentNormalization_1 = require("./commentNormalization");
|
|
28
|
+
Object.defineProperty(exports, "commentNormalizationPass", { enumerable: true, get: function () { return commentNormalization_1.commentNormalizationPass; } });
|
|
29
|
+
var printStatementRemoval_1 = require("./printStatementRemoval");
|
|
30
|
+
Object.defineProperty(exports, "printStatementRemovalPass", { enumerable: true, get: function () { return printStatementRemoval_1.printStatementRemovalPass; } });
|
|
31
|
+
var importSorting_1 = require("./importSorting");
|
|
32
|
+
Object.defineProperty(exports, "importSortingPass", { enumerable: true, get: function () { return importSorting_1.importSortingPass; } });
|
|
33
|
+
var trailingWhitespace_1 = require("./trailingWhitespace");
|
|
34
|
+
Object.defineProperty(exports, "trailingWhitespacePass", { enumerable: true, get: function () { return trailingWhitespace_1.trailingWhitespacePass; } });
|
|
35
|
+
var thenStyle_1 = require("./thenStyle");
|
|
36
|
+
Object.defineProperty(exports, "thenStylePass", { enumerable: true, get: function () { return thenStyle_1.thenStylePass; } });
|
|
37
|
+
var functionVsSub_1 = require("./functionVsSub");
|
|
38
|
+
Object.defineProperty(exports, "functionVsSubPass", { enumerable: true, get: function () { return functionVsSub_1.functionVsSubPass; } });
|
|
39
|
+
var blankLines_1 = require("./blankLines");
|
|
40
|
+
Object.defineProperty(exports, "blankLinePass", { enumerable: true, get: function () { return blankLines_1.blankLinePass; } });
|
|
41
|
+
var spacing_1 = require("./spacing");
|
|
42
|
+
Object.defineProperty(exports, "spacingPass", { enumerable: true, get: function () { return spacing_1.spacingPass; } });
|
|
43
|
+
var indentation_1 = require("./indentation");
|
|
44
|
+
Object.defineProperty(exports, "indentationPass", { enumerable: true, get: function () { return indentation_1.indentationPass; } });
|
|
45
|
+
var trailingCommas_1 = require("./trailingCommas");
|
|
46
|
+
Object.defineProperty(exports, "trailingCommaPass", { enumerable: true, get: function () { return trailingCommas_1.trailingCommaPass; } });
|
|
47
|
+
var stripCatchParens_1 = require("./stripCatchParens");
|
|
48
|
+
Object.defineProperty(exports, "stripCatchParensPass", { enumerable: true, get: function () { return stripCatchParens_1.stripCatchParensPass; } });
|
|
49
|
+
var parenthesisIfCase_1 = require("./parenthesisIfCase");
|
|
50
|
+
Object.defineProperty(exports, "parenthesisIfCasePass", { enumerable: true, get: function () { return parenthesisIfCase_1.parenthesisIfCasePass; } });
|
|
51
|
+
var lineCommentPosition_1 = require("./lineCommentPosition");
|
|
52
|
+
Object.defineProperty(exports, "lineCommentPositionPass", { enumerable: true, get: function () { return lineCommentPosition_1.lineCommentPositionPass; } });
|
|
53
|
+
var observeFieldStyle_1 = require("./observeFieldStyle");
|
|
54
|
+
Object.defineProperty(exports, "observeFieldStylePass", { enumerable: true, get: function () { return observeFieldStyle_1.observeFieldStylePass; } });
|
|
55
|
+
var commentWidth_1 = require("./commentWidth");
|
|
56
|
+
Object.defineProperty(exports, "commentWidthPass", { enumerable: true, get: function () { return commentWidth_1.commentWidthPass; } });
|
|
57
|
+
var elseOnNewLine_1 = require("./elseOnNewLine");
|
|
58
|
+
Object.defineProperty(exports, "elseOnNewLinePass", { enumerable: true, get: function () { return elseOnNewLine_1.elseOnNewLinePass; } });
|
|
59
|
+
var splitArrayOpenBracket_1 = require("./splitArrayOpenBracket");
|
|
60
|
+
Object.defineProperty(exports, "splitArrayOpenBracketPass", { enumerable: true, get: function () { return splitArrayOpenBracket_1.splitArrayOpenBracketPass; } });
|
|
61
|
+
var alignAssignments_1 = require("./alignAssignments");
|
|
62
|
+
Object.defineProperty(exports, "alignAssignmentsPass", { enumerable: true, get: function () { return alignAssignments_1.alignAssignmentsPass; } });
|
|
63
|
+
var emptyLinesBetweenMethods_1 = require("./emptyLinesBetweenMethods");
|
|
64
|
+
Object.defineProperty(exports, "emptyLinesBetweenMethodsPass", { enumerable: true, get: function () { return emptyLinesBetweenMethods_1.emptyLinesBetweenMethodsPass; } });
|
|
65
|
+
var mPrefixStyle_1 = require("./mPrefixStyle");
|
|
66
|
+
Object.defineProperty(exports, "mPrefixStylePass", { enumerable: true, get: function () { return mPrefixStyle_1.mPrefixStylePass; } });
|
|
67
|
+
var fieldAccessConsistency_1 = require("./fieldAccessConsistency");
|
|
68
|
+
Object.defineProperty(exports, "fieldAccessConsistencyPass", { enumerable: true, get: function () { return fieldAccessConsistency_1.fieldAccessConsistencyPass; } });
|
|
69
|
+
var wrapLongStrings_1 = require("./wrapLongStrings");
|
|
70
|
+
Object.defineProperty(exports, "wrapLongStringsPass", { enumerable: true, get: function () { return wrapLongStrings_1.wrapLongStringsPass; } });
|
|
71
|
+
var stringConcatStyle_1 = require("./stringConcatStyle");
|
|
72
|
+
Object.defineProperty(exports, "stringConcatStylePass", { enumerable: true, get: function () { return stringConcatStyle_1.stringConcatStylePass; } });
|
|
73
|
+
var aaThreshold_1 = require("./aaThreshold");
|
|
74
|
+
Object.defineProperty(exports, "aaThresholdPass", { enumerable: true, get: function () { return aaThreshold_1.aaThresholdPass; } });
|
|
75
|
+
var paramAlignment_1 = require("./paramAlignment");
|
|
76
|
+
Object.defineProperty(exports, "paramAlignmentPass", { enumerable: true, get: function () { return paramAlignment_1.paramAlignmentPass; } });
|
|
77
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cst-passes/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,mDAAwE;AAA/D,4GAAA,UAAU,OAAA;AAAE,8GAAA,YAAY,OAAA;AAAE,4GAAA,UAAU,OAAA;AAE7C,qDAAwD;AAA/C,sHAAA,mBAAmB,OAAA;AAC5B,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,+DAAkE;AAAzD,gIAAA,wBAAwB,OAAA;AACjC,iEAAoE;AAA3D,kIAAA,yBAAyB,OAAA;AAClC,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA;AAC1B,2DAA8D;AAArD,4HAAA,sBAAsB,OAAA;AAC/B,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AACtB,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA;AAC1B,2CAA6C;AAApC,2GAAA,aAAa,OAAA;AACtB,qCAAwC;AAA/B,sGAAA,WAAW,OAAA;AACpB,6CAAgD;AAAvC,8GAAA,eAAe,OAAA;AACxB,mDAAqD;AAA5C,mHAAA,iBAAiB,OAAA;AAC1B,uDAA0D;AAAjD,wHAAA,oBAAoB,OAAA;AAC7B,yDAA4D;AAAnD,0HAAA,qBAAqB,OAAA;AAC9B,6DAAgE;AAAvD,8HAAA,uBAAuB,OAAA;AAChC,yDAA4D;AAAnD,0HAAA,qBAAqB,OAAA;AAC9B,+CAAkD;AAAzC,gHAAA,gBAAgB,OAAA;AACzB,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA;AAC1B,iEAAoE;AAA3D,kIAAA,yBAAyB,OAAA;AAClC,uDAA0D;AAAjD,wHAAA,oBAAoB,OAAA;AAC7B,uEAA0E;AAAjE,wIAAA,4BAA4B,OAAA;AACrC,+CAAkD;AAAzC,gHAAA,gBAAgB,OAAA;AACzB,mEAAsE;AAA7D,oIAAA,0BAA0B,OAAA;AACnC,qDAAwD;AAA/C,sHAAA,mBAAmB,OAAA;AAC5B,yDAA4D;AAAnD,0HAAA,qBAAqB,OAAA;AAC9B,6CAAgD;AAAvC,8GAAA,eAAe,OAAA;AACxB,mDAAsD;AAA7C,oHAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CST-based formatting infrastructure.
|
|
3
|
+
*
|
|
4
|
+
* Each pass walks the CST and produces a list of text edits (replacements).
|
|
5
|
+
* Edits are applied in reverse order to avoid position shifts.
|
|
6
|
+
*
|
|
7
|
+
* This approach replaces the regex line-by-line transforms with
|
|
8
|
+
* structure-aware transformations that cannot accidentally modify
|
|
9
|
+
* code inside string literals or comments.
|
|
10
|
+
*/
|
|
11
|
+
import { SyntaxNode } from 'kopytko-brightscript-parser';
|
|
12
|
+
import type { Token } from 'kopytko-brightscript-parser';
|
|
13
|
+
/** A text replacement at a specific byte range in the source. */
|
|
14
|
+
export interface TextEdit {
|
|
15
|
+
/** Start byte offset (inclusive). */
|
|
16
|
+
pos: number;
|
|
17
|
+
/** End byte offset (exclusive). */
|
|
18
|
+
end: number;
|
|
19
|
+
/** New text to replace the range with. */
|
|
20
|
+
newText: string;
|
|
21
|
+
}
|
|
22
|
+
/** A CST formatting pass returns a list of edits to apply to the source. */
|
|
23
|
+
export type CstPass = (root: SyntaxNode, source: string) => TextEdit[];
|
|
24
|
+
/**
|
|
25
|
+
* Applies a list of text edits to a source string.
|
|
26
|
+
* Edits are applied in reverse order to preserve positions.
|
|
27
|
+
*/
|
|
28
|
+
export declare function applyEdits(source: string, edits: TextEdit[]): string;
|
|
29
|
+
/**
|
|
30
|
+
* Runs one or more CST passes on the source and returns the transformed text.
|
|
31
|
+
* Parses once, applies all passes, returns the result.
|
|
32
|
+
*/
|
|
33
|
+
export declare function runCstPasses(source: string, passes: CstPass[]): string;
|
|
34
|
+
/**
|
|
35
|
+
* Walks all tokens in the CST depth-first.
|
|
36
|
+
* This is the primary iteration pattern for token-level passes.
|
|
37
|
+
*/
|
|
38
|
+
export declare function walkTokens(node: SyntaxNode, callback: (token: Token, parent: SyntaxNode) => void): void;
|
|
39
|
+
//# sourceMappingURL=infrastructure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infrastructure.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/infrastructure.ts"],"names":[],"mappings":"CAAsD;;;;;;;;;GASnD;AAEH,OAAO,EAAS,UAAU,EAA8B,MAAM,6BAA6B,CAAC;AAC5F,OAAO,KAAK,EAAE,KAAK,EAA4B,MAAM,6BAA6B,CAAC;AAEnF,iEAAiE;AACjE,MAAM,WAAW,QAAQ;IACvB,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,4EAA4E;AAC5E,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;AAEvE;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAQpE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAetE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAQvG"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */ /**
|
|
3
|
+
* CST-based formatting infrastructure.
|
|
4
|
+
*
|
|
5
|
+
* Each pass walks the CST and produces a list of text edits (replacements).
|
|
6
|
+
* Edits are applied in reverse order to avoid position shifts.
|
|
7
|
+
*
|
|
8
|
+
* This approach replaces the regex line-by-line transforms with
|
|
9
|
+
* structure-aware transformations that cannot accidentally modify
|
|
10
|
+
* code inside string literals or comments.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.applyEdits = applyEdits;
|
|
14
|
+
exports.runCstPasses = runCstPasses;
|
|
15
|
+
exports.walkTokens = walkTokens;
|
|
16
|
+
const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
|
|
17
|
+
/**
|
|
18
|
+
* Applies a list of text edits to a source string.
|
|
19
|
+
* Edits are applied in reverse order to preserve positions.
|
|
20
|
+
*/
|
|
21
|
+
function applyEdits(source, edits) {
|
|
22
|
+
// Sort by position descending so we can apply without offset adjustments
|
|
23
|
+
const sorted = [...edits].sort((a, b) => b.pos - a.pos);
|
|
24
|
+
let result = source;
|
|
25
|
+
for (const edit of sorted) {
|
|
26
|
+
result = result.slice(0, edit.pos) + edit.newText + result.slice(edit.end);
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Runs one or more CST passes on the source and returns the transformed text.
|
|
32
|
+
* Parses once, applies all passes, returns the result.
|
|
33
|
+
*/
|
|
34
|
+
function runCstPasses(source, passes) {
|
|
35
|
+
const parseResult = (0, kopytko_brightscript_parser_1.parse)(source);
|
|
36
|
+
if (parseResult.diagnostics.length > 0) {
|
|
37
|
+
// Source has syntax errors — don't transform
|
|
38
|
+
return source;
|
|
39
|
+
}
|
|
40
|
+
let result = source;
|
|
41
|
+
for (const pass of passes) {
|
|
42
|
+
const edits = pass(parseResult.root, result);
|
|
43
|
+
if (edits.length > 0) {
|
|
44
|
+
result = applyEdits(result, edits);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Walks all tokens in the CST depth-first.
|
|
51
|
+
* This is the primary iteration pattern for token-level passes.
|
|
52
|
+
*/
|
|
53
|
+
function walkTokens(node, callback) {
|
|
54
|
+
for (const child of node.children) {
|
|
55
|
+
if ((0, kopytko_brightscript_parser_1.isToken)(child)) {
|
|
56
|
+
callback(child, node);
|
|
57
|
+
}
|
|
58
|
+
else if ((0, kopytko_brightscript_parser_1.isNode)(child)) {
|
|
59
|
+
walkTokens(child, callback);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=infrastructure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infrastructure.js","sourceRoot":"","sources":["../../../src/cst-passes/infrastructure.ts"],"names":[],"mappings":";AAAA,sDAAsD,CAAA;;;;;;;;;GASnD;;AAsBH,gCAQC;AAMD,oCAeC;AAMD,gCAQC;AA/DD,6EAA4F;AAgB5F;;;GAGG;AACH,SAAgB,UAAU,CAAC,MAAc,EAAE,KAAiB;IAC1D,yEAAyE;IACzE,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,MAAc,EAAE,MAAiB;IAC5D,MAAM,WAAW,GAAG,IAAA,mCAAK,EAAC,MAAM,CAAC,CAAC;IAClC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,6CAA6C;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,IAAgB,EAAE,QAAoD;IAC/F,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,IAAA,qCAAO,EAAC,KAAK,CAAC,EAAE,CAAC;YACnB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,IAAA,oCAAM,EAAC,KAAK,CAAC,EAAE,CAAC;YACzB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { SyntaxNode } from 'kopytko-brightscript-parser';
|
|
2
|
+
import { TextEdit } from './infrastructure';
|
|
3
|
+
export declare function lineCommentPositionPass(position: 'above' | 'preserve'): (root: SyntaxNode, source: string) => TextEdit[];
|
|
4
|
+
//# sourceMappingURL=lineCommentPosition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineCommentPosition.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/lineCommentPosition.ts"],"names":[],"mappings":"AAAsD,OAAO,EAAE,UAAU,EAA+B,MAAM,6BAA6B,CAAC;AAE5I,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,GAAG,UAAU,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAmBxH"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lineCommentPositionPass = lineCommentPositionPass;
|
|
4
|
+
function lineCommentPositionPass(position) {
|
|
5
|
+
if (position !== 'above')
|
|
6
|
+
return () => [];
|
|
7
|
+
return (_root, source) => {
|
|
8
|
+
const edits = [];
|
|
9
|
+
const lines = source.split(/\r?\n/);
|
|
10
|
+
for (let i = 0; i < lines.length; i++) {
|
|
11
|
+
const line = lines[i];
|
|
12
|
+
const trimmed = line.trim();
|
|
13
|
+
if (!trimmed || trimmed.startsWith("'") || /^rem\b/i.test(trimmed))
|
|
14
|
+
continue;
|
|
15
|
+
const commentIdx = findTrailingComment(line);
|
|
16
|
+
if (commentIdx < 0)
|
|
17
|
+
continue;
|
|
18
|
+
const code = line.slice(0, commentIdx).trimEnd();
|
|
19
|
+
const comment = line.slice(commentIdx);
|
|
20
|
+
const indent = line.match(/^(\s*)/)?.[1] ?? '';
|
|
21
|
+
const lineStart = lines.slice(0, i).reduce((s, l) => s + l.length + 1, 0);
|
|
22
|
+
edits.push({ pos: lineStart, end: lineStart + line.length, newText: indent + comment + '\n' + indent + code });
|
|
23
|
+
}
|
|
24
|
+
return edits;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function findTrailingComment(line) {
|
|
28
|
+
let inStr = false;
|
|
29
|
+
for (let i = 0; i < line.length; i++) {
|
|
30
|
+
if (line[i] === '"') {
|
|
31
|
+
if (inStr && line[i + 1] === '"') {
|
|
32
|
+
i++;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
inStr = !inStr;
|
|
36
|
+
}
|
|
37
|
+
else if (!inStr && line[i] === "'")
|
|
38
|
+
return i;
|
|
39
|
+
}
|
|
40
|
+
return -1;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=lineCommentPosition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineCommentPosition.js","sourceRoot":"","sources":["../../../src/cst-passes/lineCommentPosition.ts"],"names":[],"mappings":";;AAIA,0DAmBC;AAnBD,SAAgB,uBAAuB,CAAC,QAA8B;IACpE,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;IAC1C,OAAO,CAAC,KAAiB,EAAE,MAAc,EAAc,EAAE;QACvD,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC7E,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,UAAU,GAAG,CAAC;gBAAE,SAAS;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;QACjH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AACD,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAAC,KAAK,GAAG,CAAC,KAAK,CAAC;QAAC,CAAC;aACtF,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mPrefixStyle.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/mPrefixStyle.ts"],"names":[],"mappings":"AAAsD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAKhG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mPrefixStylePass = mPrefixStylePass;
|
|
4
|
+
function mPrefixStylePass(style) {
|
|
5
|
+
if (style === 'preserve')
|
|
6
|
+
return () => [];
|
|
7
|
+
return (_root, _source) => {
|
|
8
|
+
return [];
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=mPrefixStyle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mPrefixStyle.js","sourceRoot":"","sources":["../../../src/cst-passes/mPrefixStyle.ts"],"names":[],"mappings":";;AAGA,4CAKC;AALD,SAAgB,gBAAgB,CAAC,KAAa;IAC5C,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,6 @@
|
|
|
1
|
+
import { SyntaxNode } from 'kopytko-brightscript-parser';
|
|
2
|
+
import { TextEdit } from './infrastructure';
|
|
3
|
+
type ObserveStyle = 'always-scoped' | 'warn' | 'preserve';
|
|
4
|
+
export declare function observeFieldStylePass(style: ObserveStyle): (root: SyntaxNode, source: string) => TextEdit[];
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=observeFieldStyle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observeFieldStyle.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/observeFieldStyle.ts"],"names":[],"mappings":"AAAsD,OAAO,EAAE,UAAU,EAA0C,MAAM,6BAA6B,CAAC;AACvJ,OAAO,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAC;AAExD,KAAK,YAAY,GAAG,eAAe,GAAG,MAAM,GAAG,UAAU,CAAC;AAE1D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAY3G"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.observeFieldStylePass = observeFieldStylePass;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */ const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
|
|
5
|
+
const infrastructure_1 = require("./infrastructure");
|
|
6
|
+
function observeFieldStylePass(style) {
|
|
7
|
+
if (style === 'preserve')
|
|
8
|
+
return () => [];
|
|
9
|
+
return (root, _source) => {
|
|
10
|
+
const edits = [];
|
|
11
|
+
(0, infrastructure_1.walkTokens)(root, (token) => {
|
|
12
|
+
if (token.kind !== kopytko_brightscript_parser_1.TokenKind.Identifier)
|
|
13
|
+
return;
|
|
14
|
+
if (style === 'always-scoped' && token.text.toLowerCase() === 'observefield') {
|
|
15
|
+
edits.push({ pos: token.pos, end: token.end, newText: 'observeFieldScoped' });
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
return edits;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=observeFieldStyle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observeFieldStyle.js","sourceRoot":"","sources":["../../../src/cst-passes/observeFieldStyle.ts"],"names":[],"mappings":";;AAKA,sDAYC;AAjBD,sDAAsD,CAAA,6EAAiG;AACvJ,qDAAwD;AAIxD,SAAgB,qBAAqB,CAAC,KAAmB;IACvD,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;IAC1C,OAAO,CAAC,IAAgB,EAAE,OAAe,EAAc,EAAE;QACvD,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,IAAA,2BAAU,EAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,IAAI,KAAK,CAAC,IAAI,KAAK,uCAAS,CAAC,UAAU;gBAAE,OAAO;YAChD,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,cAAc,EAAE,CAAC;gBAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAChF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paramAlignment.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/paramAlignment.ts"],"names":[],"mappings":"AAAsD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAKlG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.paramAlignmentPass = paramAlignmentPass;
|
|
4
|
+
function paramAlignmentPass(style) {
|
|
5
|
+
if (style === 'preserve')
|
|
6
|
+
return () => [];
|
|
7
|
+
return (_root, _source) => {
|
|
8
|
+
return [];
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=paramAlignment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paramAlignment.js","sourceRoot":"","sources":["../../../src/cst-passes/paramAlignment.ts"],"names":[],"mappings":";;AAGA,gDAKC;AALD,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,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,6 @@
|
|
|
1
|
+
import { SyntaxNode } from 'kopytko-brightscript-parser';
|
|
2
|
+
import { TextEdit } from './infrastructure';
|
|
3
|
+
type ParenStyle = 'always' | 'never' | 'preserve';
|
|
4
|
+
export declare function parenthesisIfCasePass(style: ParenStyle): (root: SyntaxNode, source: string) => TextEdit[];
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=parenthesisIfCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parenthesisIfCase.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/parenthesisIfCase.ts"],"names":[],"mappings":"AAAsD,OAAO,EAAE,UAAU,EAA0C,MAAM,6BAA6B,CAAC;AAEvJ,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,KAAK,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAElD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CA+BzG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parenthesisIfCasePass = parenthesisIfCasePass;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */ const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
|
|
5
|
+
function parenthesisIfCasePass(style) {
|
|
6
|
+
if (style === 'preserve')
|
|
7
|
+
return () => [];
|
|
8
|
+
return (root, _source) => {
|
|
9
|
+
const edits = [];
|
|
10
|
+
function visit(node) {
|
|
11
|
+
if (node.kind === kopytko_brightscript_parser_1.SyntaxKind.IfStatement || node.kind === kopytko_brightscript_parser_1.SyntaxKind.ElseIfClause) {
|
|
12
|
+
const children = node.children;
|
|
13
|
+
let condIdx = -1;
|
|
14
|
+
for (let i = 0; i < children.length; i++) {
|
|
15
|
+
const c = children[i];
|
|
16
|
+
if ((0, kopytko_brightscript_parser_1.isToken)(c) && (c.kind === kopytko_brightscript_parser_1.TokenKind.If || c.kind === kopytko_brightscript_parser_1.TokenKind.ElseIf)) {
|
|
17
|
+
condIdx = i + 1;
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (condIdx >= 0 && condIdx < children.length && (0, kopytko_brightscript_parser_1.isNode)(children[condIdx])) {
|
|
22
|
+
const condNode = children[condIdx];
|
|
23
|
+
if (style === 'always' && condNode.kind !== kopytko_brightscript_parser_1.SyntaxKind.GroupingExpression) {
|
|
24
|
+
const condText = condNode.getText();
|
|
25
|
+
edits.push({ pos: condNode.pos, end: condNode.end, newText: '(' + condText + ')' });
|
|
26
|
+
}
|
|
27
|
+
else if (style === 'never' && condNode.kind === kopytko_brightscript_parser_1.SyntaxKind.GroupingExpression) {
|
|
28
|
+
const innerText = condNode.getText().slice(1, -1);
|
|
29
|
+
edits.push({ pos: condNode.pos, end: condNode.end, newText: innerText });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
for (const child of node.children) {
|
|
34
|
+
if ((0, kopytko_brightscript_parser_1.isNode)(child))
|
|
35
|
+
visit(child);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
visit(root);
|
|
39
|
+
return edits;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=parenthesisIfCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parenthesisIfCase.js","sourceRoot":"","sources":["../../../src/cst-passes/parenthesisIfCase.ts"],"names":[],"mappings":";;AAMA,sDA+BC;AArCD,sDAAsD,CAAA,6EAAiG;AAMvJ,SAAgB,qBAAqB,CAAC,KAAiB;IACrD,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;IAC1C,OAAO,CAAC,IAAgB,EAAE,OAAe,EAAc,EAAE;QACvD,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,SAAS,KAAK,CAAC,IAAgB;YAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,wCAAU,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,wCAAU,CAAC,YAAY,EAAE,CAAC;gBAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC/B,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;gBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACtB,IAAI,IAAA,qCAAO,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,uCAAS,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,uCAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC3E,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;wBAChB,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,IAAA,oCAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;oBAC3E,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAe,CAAC;oBACjD,IAAI,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,wCAAU,CAAC,kBAAkB,EAAE,CAAC;wBAC1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACpC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;oBACtF,CAAC;yBAAM,IAAI,KAAK,KAAK,OAAO,IAAI,QAAQ,CAAC,IAAI,KAAK,wCAAU,CAAC,kBAAkB,EAAE,CAAC;wBAChF,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAClD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC3E,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,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CST Pass: Print statement removal.
|
|
3
|
+
*
|
|
4
|
+
* Removes all `print` and `?` statements from the source.
|
|
5
|
+
* Used to strip debug output before release builds.
|
|
6
|
+
*
|
|
7
|
+
* Unlike the regex version (`/^\s*(?:print|\?)\b/i`), this pass:
|
|
8
|
+
* - Uses the parsed AST to find actual PrintStatement nodes
|
|
9
|
+
* - Cannot match "print" inside strings or comments
|
|
10
|
+
* - Correctly handles multi-line print statements
|
|
11
|
+
* - Removes the entire statement including its trailing trivia (newline)
|
|
12
|
+
*/
|
|
13
|
+
import { SyntaxNode } from 'kopytko-brightscript-parser';
|
|
14
|
+
import { TextEdit } from './infrastructure';
|
|
15
|
+
/**
|
|
16
|
+
* Creates a print-removal CST pass.
|
|
17
|
+
* Finds all PrintStatement nodes and removes them (including their line).
|
|
18
|
+
*/
|
|
19
|
+
export declare function printStatementRemovalPass(): (root: SyntaxNode, source: string) => TextEdit[];
|
|
20
|
+
//# sourceMappingURL=printStatementRemoval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"printStatementRemoval.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/printStatementRemoval.ts"],"names":[],"mappings":"CAAsD;;;;;;;;;;;GAWnD;AAEH,OAAO,EAAE,UAAU,EAA+B,MAAM,6BAA6B,CAAC;AAEtF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAsB5F"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */ /**
|
|
3
|
+
* CST Pass: Print statement removal.
|
|
4
|
+
*
|
|
5
|
+
* Removes all `print` and `?` statements from the source.
|
|
6
|
+
* Used to strip debug output before release builds.
|
|
7
|
+
*
|
|
8
|
+
* Unlike the regex version (`/^\s*(?:print|\?)\b/i`), this pass:
|
|
9
|
+
* - Uses the parsed AST to find actual PrintStatement nodes
|
|
10
|
+
* - Cannot match "print" inside strings or comments
|
|
11
|
+
* - Correctly handles multi-line print statements
|
|
12
|
+
* - Removes the entire statement including its trailing trivia (newline)
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.printStatementRemovalPass = printStatementRemovalPass;
|
|
16
|
+
const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
|
|
17
|
+
/**
|
|
18
|
+
* Creates a print-removal CST pass.
|
|
19
|
+
* Finds all PrintStatement nodes and removes them (including their line).
|
|
20
|
+
*/
|
|
21
|
+
function printStatementRemovalPass() {
|
|
22
|
+
return (root, _source) => {
|
|
23
|
+
const edits = [];
|
|
24
|
+
function findPrintStatements(node) {
|
|
25
|
+
for (const child of node.children) {
|
|
26
|
+
if ((0, kopytko_brightscript_parser_1.isNode)(child)) {
|
|
27
|
+
if (child.kind === kopytko_brightscript_parser_1.SyntaxKind.PrintStatement) {
|
|
28
|
+
// Calculate the full range including leading whitespace and trailing newline
|
|
29
|
+
const fullStart = getFullStart(child);
|
|
30
|
+
const fullEnd = getFullEnd(child);
|
|
31
|
+
edits.push({ pos: fullStart, end: fullEnd, newText: '' });
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
findPrintStatements(child);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
findPrintStatements(root);
|
|
40
|
+
return edits;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Gets the start of a node including its leading trivia (indentation). */
|
|
44
|
+
function getFullStart(node) {
|
|
45
|
+
const first = node.children[0];
|
|
46
|
+
if (!first)
|
|
47
|
+
return node.pos;
|
|
48
|
+
if ((0, kopytko_brightscript_parser_1.isToken)(first) && first.leadingTrivia.length > 0) {
|
|
49
|
+
// Include leading whitespace (indentation) but not comments
|
|
50
|
+
const firstTrivia = first.leadingTrivia[0];
|
|
51
|
+
if (firstTrivia.kind === 'Whitespace')
|
|
52
|
+
return firstTrivia.pos;
|
|
53
|
+
}
|
|
54
|
+
return (0, kopytko_brightscript_parser_1.isToken)(first) ? first.pos : getFullStart(first);
|
|
55
|
+
}
|
|
56
|
+
/** Gets the end of a node including its trailing newline. */
|
|
57
|
+
function getFullEnd(node) {
|
|
58
|
+
const last = node.children[node.children.length - 1];
|
|
59
|
+
if (!last)
|
|
60
|
+
return node.end;
|
|
61
|
+
if ((0, kopytko_brightscript_parser_1.isToken)(last) && last.trailingTrivia.length > 0) {
|
|
62
|
+
const lastTrivia = last.trailingTrivia[last.trailingTrivia.length - 1];
|
|
63
|
+
return lastTrivia.end;
|
|
64
|
+
}
|
|
65
|
+
return (0, kopytko_brightscript_parser_1.isToken)(last) ? last.end : getFullEnd(last);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=printStatementRemoval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"printStatementRemoval.js","sourceRoot":"","sources":["../../../src/cst-passes/printStatementRemoval.ts"],"names":[],"mappings":";AAAA,sDAAsD,CAAA;;;;;;;;;;;GAWnD;;AAUH,8DAsBC;AA9BD,6EAAsF;AAItF;;;GAGG;AACH,SAAgB,yBAAyB;IACvC,OAAO,CAAC,IAAgB,EAAE,OAAe,EAAc,EAAE;QACvD,MAAM,KAAK,GAAe,EAAE,CAAC;QAE7B,SAAS,mBAAmB,CAAC,IAAgB;YAC3C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,IAAA,oCAAM,EAAC,KAAK,CAAC,EAAE,CAAC;oBAClB,IAAI,KAAK,CAAC,IAAI,KAAK,wCAAU,CAAC,cAAc,EAAE,CAAC;wBAC7C,6EAA6E;wBAC7E,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;wBACtC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;wBAClC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC5D,CAAC;yBAAM,CAAC;wBACN,mBAAmB,CAAC,KAAK,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,SAAS,YAAY,CAAC,IAAgB;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC;IAC5B,IAAI,IAAA,qCAAO,EAAC,KAAK,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,4DAA4D;QAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,WAAW,CAAC,GAAG,CAAC;IAChE,CAAC;IACD,OAAO,IAAA,qCAAO,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,6DAA6D;AAC7D,SAAS,UAAU,CAAC,IAAgB;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC;IAC3B,IAAI,IAAA,qCAAO,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvE,OAAO,UAAU,CAAC,GAAG,CAAC;IACxB,CAAC;IACD,OAAO,IAAA,qCAAO,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CST Pass: Spacing normalization.
|
|
3
|
+
*
|
|
4
|
+
* Enforces consistent spacing around operators, assignments, and parentheses.
|
|
5
|
+
* Works on the whitespace trivia between tokens.
|
|
6
|
+
*/
|
|
7
|
+
import { SyntaxNode } from 'kopytko-brightscript-parser';
|
|
8
|
+
import { TextEdit } from './infrastructure';
|
|
9
|
+
interface SpacingConfig {
|
|
10
|
+
spaceAroundOperators: boolean;
|
|
11
|
+
spaceAroundAssignment: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates a spacing pass that normalizes whitespace around operators.
|
|
15
|
+
* This is a simplified version — handles the most common cases.
|
|
16
|
+
*/
|
|
17
|
+
export declare function spacingPass(config: SpacingConfig): (root: SyntaxNode, source: string) => TextEdit[];
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=spacing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spacing.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/spacing.ts"],"names":[],"mappings":"AAAC;;;;;EAKE;AAEH,OAAO,EAAE,UAAU,EAA8B,MAAM,6BAA6B,CAAC;AAErF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,UAAU,aAAa;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAkBD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CA2BnG"}
|