@atlisp/lint 0.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.
Files changed (86) hide show
  1. package/README.md +150 -0
  2. package/atlisp-lint.default.json +52 -0
  3. package/bin/atlisp-lint +2 -0
  4. package/dist/atlisp-lint.default.json +52 -0
  5. package/dist/checks/bare-names.d.ts +3 -0
  6. package/dist/checks/bare-names.d.ts.map +1 -0
  7. package/dist/checks/bare-names.js +28 -0
  8. package/dist/checks/bare-names.js.map +1 -0
  9. package/dist/checks/cl-syntax.d.ts +3 -0
  10. package/dist/checks/cl-syntax.d.ts.map +1 -0
  11. package/dist/checks/cl-syntax.js +24 -0
  12. package/dist/checks/cl-syntax.js.map +1 -0
  13. package/dist/checks/dangerous-calls.d.ts +3 -0
  14. package/dist/checks/dangerous-calls.d.ts.map +1 -0
  15. package/dist/checks/dangerous-calls.js +43 -0
  16. package/dist/checks/dangerous-calls.js.map +1 -0
  17. package/dist/checks/encoding.d.ts +3 -0
  18. package/dist/checks/encoding.d.ts.map +1 -0
  19. package/dist/checks/encoding.js +33 -0
  20. package/dist/checks/encoding.js.map +1 -0
  21. package/dist/checks/module-reg.d.ts +3 -0
  22. package/dist/checks/module-reg.d.ts.map +1 -0
  23. package/dist/checks/module-reg.js +25 -0
  24. package/dist/checks/module-reg.js.map +1 -0
  25. package/dist/checks/namespace-header.d.ts +3 -0
  26. package/dist/checks/namespace-header.d.ts.map +1 -0
  27. package/dist/checks/namespace-header.js +28 -0
  28. package/dist/checks/namespace-header.js.map +1 -0
  29. package/dist/checks/open-close.d.ts +3 -0
  30. package/dist/checks/open-close.d.ts.map +1 -0
  31. package/dist/checks/open-close.js +22 -0
  32. package/dist/checks/open-close.js.map +1 -0
  33. package/dist/checks/parens.d.ts +3 -0
  34. package/dist/checks/parens.d.ts.map +1 -0
  35. package/dist/checks/parens.js +42 -0
  36. package/dist/checks/parens.js.map +1 -0
  37. package/dist/checks/token-in-url.d.ts +3 -0
  38. package/dist/checks/token-in-url.d.ts.map +1 -0
  39. package/dist/checks/token-in-url.js +23 -0
  40. package/dist/checks/token-in-url.js.map +1 -0
  41. package/dist/checks/trailing-ws.d.ts +3 -0
  42. package/dist/checks/trailing-ws.d.ts.map +1 -0
  43. package/dist/checks/trailing-ws.js +19 -0
  44. package/dist/checks/trailing-ws.js.map +1 -0
  45. package/dist/checks/vlax.d.ts +3 -0
  46. package/dist/checks/vlax.d.ts.map +1 -0
  47. package/dist/checks/vlax.js +19 -0
  48. package/dist/checks/vlax.js.map +1 -0
  49. package/dist/config.d.ts +4 -0
  50. package/dist/config.d.ts.map +1 -0
  51. package/dist/config.js +128 -0
  52. package/dist/config.js.map +1 -0
  53. package/dist/formatters.d.ts +4 -0
  54. package/dist/formatters.d.ts.map +1 -0
  55. package/dist/formatters.js +33 -0
  56. package/dist/formatters.js.map +1 -0
  57. package/dist/index.d.ts +2 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +236 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/lib/lint-sbcl.lisp +126 -0
  62. package/dist/locale.d.ts +4 -0
  63. package/dist/locale.d.ts.map +1 -0
  64. package/dist/locale.js +91 -0
  65. package/dist/locale.js.map +1 -0
  66. package/dist/runner.d.ts +3 -0
  67. package/dist/runner.d.ts.map +1 -0
  68. package/dist/runner.js +113 -0
  69. package/dist/runner.js.map +1 -0
  70. package/dist/sbcl.d.ts +3 -0
  71. package/dist/sbcl.d.ts.map +1 -0
  72. package/dist/sbcl.js +121 -0
  73. package/dist/sbcl.js.map +1 -0
  74. package/dist/stub-packages.json +41 -0
  75. package/dist/types.d.ts +60 -0
  76. package/dist/types.d.ts.map +1 -0
  77. package/dist/types.js +3 -0
  78. package/dist/types.js.map +1 -0
  79. package/dist/utils.d.ts +12 -0
  80. package/dist/utils.d.ts.map +1 -0
  81. package/dist/utils.js +104 -0
  82. package/dist/utils.js.map +1 -0
  83. package/lib/lint-sbcl.lisp +126 -0
  84. package/package.json +35 -0
  85. package/pre-commit/hook.sh +4 -0
  86. package/stub-packages.json +41 -0
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkTokenInUrl = checkTokenInUrl;
4
+ const utils_1 = require("../utils");
5
+ const locale_1 = require("../locale");
6
+ function checkTokenInUrl(content, file) {
7
+ const issues = [];
8
+ const lines = content.split('\n');
9
+ for (let i = 0; i < lines.length; i++) {
10
+ const strings = (0, utils_1.extractStrings)(lines[i]);
11
+ for (const s of strings) {
12
+ if (/token=/i.test(s)) {
13
+ issues.push({
14
+ file, line: i + 1, severity: 'warn', rule: 'token_in_url',
15
+ message: (0, locale_1.t)('token_in_url'),
16
+ });
17
+ break; // one per line
18
+ }
19
+ }
20
+ }
21
+ return issues;
22
+ }
23
+ //# sourceMappingURL=token-in-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-in-url.js","sourceRoot":"","sources":["../../src/checks/token-in-url.ts"],"names":[],"mappings":";;AAIA,0CAgBC;AAnBD,oCAA0C;AAC1C,sCAA8B;AAE9B,SAAgB,eAAe,CAAC,OAAe,EAAE,IAAY;IAC3D,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc;oBACzD,OAAO,EAAE,IAAA,UAAC,EAAC,cAAc,CAAC;iBAC3B,CAAC,CAAC;gBACH,MAAM,CAAC,eAAe;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Issue } from '../types';
2
+ export declare function checkTrailingWhitespace(content: string, file: string): Issue[];
3
+ //# sourceMappingURL=trailing-ws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailing-ws.d.ts","sourceRoot":"","sources":["../../src/checks/trailing-ws.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAa9E"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkTrailingWhitespace = checkTrailingWhitespace;
4
+ const locale_1 = require("../locale");
5
+ function checkTrailingWhitespace(content, file) {
6
+ const issues = [];
7
+ const lines = content.split('\n');
8
+ for (let i = 0; i < lines.length; i++) {
9
+ const line = lines[i];
10
+ if (line.length > 0 && /[ \t]$/.test(line)) {
11
+ issues.push({
12
+ file, line: i + 1, severity: 'warn', rule: 'trailing_whitespace',
13
+ message: (0, locale_1.t)('trailing_whitespace'),
14
+ });
15
+ }
16
+ }
17
+ return issues;
18
+ }
19
+ //# sourceMappingURL=trailing-ws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailing-ws.js","sourceRoot":"","sources":["../../src/checks/trailing-ws.ts"],"names":[],"mappings":";;AAGA,0DAaC;AAfD,sCAA8B;AAE9B,SAAgB,uBAAuB,CAAC,OAAe,EAAE,IAAY;IACnE,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB;gBAChE,OAAO,EAAE,IAAA,UAAC,EAAC,qBAAqB,CAAC;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Issue } from '../types';
2
+ export declare function checkVlaxWithoutLoading(content: string, file: string): Issue[];
3
+ //# sourceMappingURL=vlax.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vlax.d.ts","sourceRoot":"","sources":["../../src/checks/vlax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAIjC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAW9E"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkVlaxWithoutLoading = checkVlaxWithoutLoading;
4
+ const utils_1 = require("../utils");
5
+ const locale_1 = require("../locale");
6
+ function checkVlaxWithoutLoading(content, file) {
7
+ if (content.includes('vl-load-com'))
8
+ return [];
9
+ for (const { lineno, stripped } of (0, utils_1.codeLines)(content)) {
10
+ if (/vlax-/i.test(stripped)) {
11
+ return [{
12
+ file, line: lineno, severity: 'warn', rule: 'vlax_without_loading',
13
+ message: (0, locale_1.t)('vlax_without_loading'),
14
+ }];
15
+ }
16
+ }
17
+ return [];
18
+ }
19
+ //# sourceMappingURL=vlax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vlax.js","sourceRoot":"","sources":["../../src/checks/vlax.ts"],"names":[],"mappings":";;AAIA,0DAWC;AAdD,oCAAqC;AACrC,sCAA8B;AAE9B,SAAgB,uBAAuB,CAAC,OAAe,EAAE,IAAY;IACnE,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/C,KAAK,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAA,iBAAS,EAAC,OAAO,CAAC,EAAE,CAAC;QACtD,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC;oBACN,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB;oBAClE,OAAO,EAAE,IAAA,UAAC,EAAC,sBAAsB,CAAC;iBACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { LintConfig, Severity } from './types';
2
+ export declare function loadConfig(configPath?: string): LintConfig;
3
+ export declare function getCheckSeverity(config: LintConfig, checkName: string): Severity;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAwB,MAAM,SAAS,CAAC;AAuDrE,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAe1D;AAmBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAIhF"}
package/dist/config.js ADDED
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loadConfig = loadConfig;
37
+ exports.getCheckSeverity = getCheckSeverity;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const DEFAULT_CONFIG = {
41
+ locale: 'zh',
42
+ source: {
43
+ globs: ['**/*.lsp'],
44
+ exclude: ['**/node_modules/**', '**/vendor/**', '**/.git/**'],
45
+ },
46
+ checks: {
47
+ parens: 'error',
48
+ encoding: 'error',
49
+ cl_syntax: 'warn',
50
+ quit_exit: 'error',
51
+ command_shell: 'error',
52
+ startapp: 'warn',
53
+ vl_registry_write: 'warn',
54
+ vlax_without_loading: 'warn',
55
+ token_in_url: 'warn',
56
+ open_without_close: 'warn',
57
+ bare_function_names: 'warn',
58
+ trailing_whitespace: 'warn',
59
+ module_registration: 'off',
60
+ namespace_header: 'off',
61
+ },
62
+ cl_syntax: {
63
+ keywords: ['&key'],
64
+ },
65
+ dangerous_calls: {
66
+ quit: 'error',
67
+ exit: 'error',
68
+ command_shell: 'error',
69
+ startapp: 'warn',
70
+ vl_registry_write: 'warn',
71
+ },
72
+ module_registration: {
73
+ severity: 'off',
74
+ patterns: [],
75
+ dirs: ['modules'],
76
+ },
77
+ namespace_header: {
78
+ severity: 'off',
79
+ package: '',
80
+ deps: [],
81
+ search_lines: 15,
82
+ },
83
+ bare_function_names: {
84
+ allowlist: ['T', 'nil'],
85
+ namespace_pattern: '^[a-z]+:',
86
+ },
87
+ sbcl: {
88
+ walk_exclude: ['.vscode', 'vendor', '.git'],
89
+ defmacro_allow_files: ['compat-cl'],
90
+ },
91
+ };
92
+ function loadConfig(configPath) {
93
+ if (configPath) {
94
+ const absPath = path.resolve(configPath);
95
+ if (!fs.existsSync(absPath)) {
96
+ throw new Error(`Config file not found: ${absPath}`);
97
+ }
98
+ const raw = fs.readFileSync(absPath, 'utf-8');
99
+ const user = JSON.parse(raw);
100
+ // Deep merge: start from default, overlay user values
101
+ const merged = JSON.parse(JSON.stringify(DEFAULT_CONFIG));
102
+ deepMerge(merged, user);
103
+ return merged;
104
+ }
105
+ return JSON.parse(JSON.stringify(DEFAULT_CONFIG));
106
+ }
107
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
+ function deepMerge(target, source) {
109
+ for (const key of Object.keys(source)) {
110
+ const val = source[key];
111
+ if (val !== null && typeof val === 'object' && !Array.isArray(val)) {
112
+ if (!target[key] || typeof target[key] !== 'object') {
113
+ target[key] = {};
114
+ }
115
+ deepMerge(target[key], val);
116
+ }
117
+ else {
118
+ target[key] = val;
119
+ }
120
+ }
121
+ }
122
+ function getCheckSeverity(config, checkName) {
123
+ const sev = config.checks[checkName];
124
+ if (sev === 'error' || sev === 'warn')
125
+ return sev;
126
+ return 'off';
127
+ }
128
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Issue } from './types';
2
+ export declare function formatDefault(issues: Issue[]): string;
3
+ export declare function formatJson(issues: Issue[]): string;
4
+ //# sourceMappingURL=formatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAuBrD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAElD"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatDefault = formatDefault;
4
+ exports.formatJson = formatJson;
5
+ const locale_1 = require("./locale");
6
+ function formatDefault(issues) {
7
+ const lines = [];
8
+ let errors = 0, warnings = 0;
9
+ for (const iss of issues) {
10
+ if (iss.severity === 'error')
11
+ errors++;
12
+ else if (iss.severity === 'warn')
13
+ warnings++;
14
+ const tag = iss.severity === 'error' ? (0, locale_1.t)('summary.tag_fail') : (0, locale_1.t)('summary.tag_warn');
15
+ const loc = iss.line > 0 ? `${(0, locale_1.t)('summary.line')} ${iss.line}` : '';
16
+ lines.push(`${tag}: ${iss.file} — ${loc}${loc ? ': ' : ''}${iss.message}`.trim());
17
+ }
18
+ if (lines.length > 0)
19
+ lines.push('');
20
+ lines.push((0, locale_1.t)('summary.header'));
21
+ if (errors === 0 && warnings === 0) {
22
+ lines.push((0, locale_1.t)('summary.all_ok'));
23
+ }
24
+ else {
25
+ lines.push((0, locale_1.t)('summary.errors_warnings', errors, warnings));
26
+ }
27
+ lines.push((0, locale_1.t)('summary.done'));
28
+ return lines.join('\n');
29
+ }
30
+ function formatJson(issues) {
31
+ return JSON.stringify({ issues }, null, 2);
32
+ }
33
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":";;AAGA,sCAuBC;AAED,gCAEC;AA7BD,qCAA6B;AAE7B,SAAgB,aAAa,CAAC,MAAe;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO;YAAE,MAAM,EAAE,CAAC;aAClC,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM;YAAE,QAAQ,EAAE,CAAC;QAE7C,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAA,UAAC,EAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAA,UAAC,EAAC,kBAAkB,CAAC,CAAC;QACrF,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAA,UAAC,EAAC,cAAc,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,IAAA,UAAC,EAAC,gBAAgB,CAAC,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,IAAA,UAAC,EAAC,gBAAgB,CAAC,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,IAAA,UAAC,EAAC,yBAAyB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAA,UAAC,EAAC,cAAc,CAAC,CAAC,CAAC;IAE9B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,UAAU,CAAC,MAAe;IACxC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function main(): void;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA+IA,wBAAgB,IAAI,IAAI,IAAI,CAsD3B"}
package/dist/index.js ADDED
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.main = main;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const child_process_1 = require("child_process");
40
+ const config_1 = require("./config");
41
+ const runner_1 = require("./runner");
42
+ const sbcl_1 = require("./sbcl");
43
+ const formatters_1 = require("./formatters");
44
+ const locale_1 = require("./locale");
45
+ function parseArgs() {
46
+ const argv = process.argv.slice(2);
47
+ const opts = { src: [], test: [], staged: false, format: 'default', init: false, installHook: false };
48
+ for (let i = 0; i < argv.length; i++) {
49
+ switch (argv[i]) {
50
+ case '--src':
51
+ opts.src.push(argv[++i]);
52
+ break;
53
+ case '--test':
54
+ opts.test.push(argv[++i]);
55
+ break;
56
+ case '--config':
57
+ opts.config = argv[++i];
58
+ break;
59
+ case '--staged':
60
+ opts.staged = true;
61
+ break;
62
+ case '--format':
63
+ opts.format = argv[++i];
64
+ break;
65
+ case '--init':
66
+ opts.init = true;
67
+ break;
68
+ case '--install-hook':
69
+ opts.installHook = true;
70
+ break;
71
+ default: break;
72
+ }
73
+ }
74
+ return opts;
75
+ }
76
+ // Zero-dependency glob: **/*.lsp → recursive walk + regex match
77
+ function* walkFiles(dir, rootDir, regex) {
78
+ let entries;
79
+ try {
80
+ entries = fs.readdirSync(dir);
81
+ }
82
+ catch {
83
+ return;
84
+ }
85
+ for (const entry of entries) {
86
+ const fullPath = path.join(dir, entry);
87
+ let stat;
88
+ try {
89
+ stat = fs.statSync(fullPath);
90
+ }
91
+ catch {
92
+ continue;
93
+ }
94
+ if (stat.isDirectory()) {
95
+ yield* walkFiles(fullPath, rootDir, regex);
96
+ }
97
+ else if (stat.isFile()) {
98
+ const rel = path.relative(rootDir, fullPath).replace(/\\/g, '/');
99
+ if (regex.test(rel))
100
+ yield fullPath;
101
+ }
102
+ }
103
+ }
104
+ function globFiles(pattern, rootDir) {
105
+ const regexStr = pattern
106
+ .replace(/\./g, '\\.')
107
+ .replace(/\*\*\//g, '(.*/)?')
108
+ .replace(/\*\*/g, '.*')
109
+ .replace(/\*/g, '[^/]*')
110
+ .replace(/\?/g, '.');
111
+ const regex = new RegExp(`^${regexStr}$`);
112
+ return Array.from(walkFiles(rootDir, rootDir, regex));
113
+ }
114
+ function collectFiles(rootDir, opts, config) {
115
+ const files = new Set();
116
+ if (opts.src.length > 0 || opts.test.length > 0) {
117
+ // Walk specific directories
118
+ for (const d of opts.src) {
119
+ for (const f of globFiles('**/*.lsp', path.resolve(rootDir, d))) {
120
+ files.add(f);
121
+ }
122
+ }
123
+ for (const d of opts.test) {
124
+ for (const f of globFiles('**/*.lsp', path.resolve(rootDir, d))) {
125
+ files.add(f);
126
+ }
127
+ }
128
+ }
129
+ else {
130
+ // Use config globs relative to rootDir
131
+ for (const pattern of config.source.globs) {
132
+ for (const f of globFiles(pattern, rootDir)) {
133
+ files.add(f);
134
+ }
135
+ }
136
+ }
137
+ const excludePatterns = config.source.exclude.map(e => {
138
+ const str = e.replace(/\./g, '\\.').replace(/\*\*/g, '.*').replace(/\*/g, '[^/]*');
139
+ return new RegExp(`^${str}$`);
140
+ });
141
+ return Array.from(files).filter(f => {
142
+ const rel = path.relative(rootDir, f).replace(/\\/g, '/');
143
+ for (const re of excludePatterns) {
144
+ if (re.test(rel))
145
+ return false;
146
+ }
147
+ return true;
148
+ }).sort();
149
+ }
150
+ function collectStagedFiles(rootDir) {
151
+ const output = (0, child_process_1.execSync)('git diff --cached --name-only --diff-filter=ACM', {
152
+ cwd: rootDir, encoding: 'utf-8',
153
+ });
154
+ return output.split('\n')
155
+ .map(l => l.trim())
156
+ .filter(l => l.endsWith('.lsp'))
157
+ .map(l => path.resolve(rootDir, l))
158
+ .filter(f => fs.existsSync(f));
159
+ }
160
+ function initConfig(rootDir) {
161
+ const defaultPath = path.join(__dirname, '..', 'atlisp-lint.default.json');
162
+ const targetPath = path.join(rootDir, 'atlisp-lint.json');
163
+ if (fs.existsSync(targetPath)) {
164
+ console.log((0, locale_1.t)('index.config_exists'));
165
+ return;
166
+ }
167
+ const content = fs.readFileSync(defaultPath, 'utf-8');
168
+ fs.writeFileSync(targetPath, content, 'utf-8');
169
+ console.log((0, locale_1.t)('index.config_created', targetPath));
170
+ }
171
+ function installPreCommitHook(rootDir) {
172
+ const hookDir = path.join(rootDir, '.git', 'hooks');
173
+ if (!fs.existsSync(hookDir)) {
174
+ console.error((0, locale_1.t)('index.not_git'));
175
+ process.exit(1);
176
+ }
177
+ const hookPath = path.join(hookDir, 'pre-commit');
178
+ const hookContent = `#!/bin/sh
179
+ # AutoLISP Lint pre-commit hook
180
+ npx @atlisp/lint --staged || exit 1
181
+ `;
182
+ fs.writeFileSync(hookPath, hookContent, 'utf-8');
183
+ fs.chmodSync(hookPath, 0o755);
184
+ console.log((0, locale_1.t)('index.hook_installed', hookPath));
185
+ }
186
+ function main() {
187
+ const opts = parseArgs();
188
+ const rootDir = process.cwd();
189
+ if (opts.init) {
190
+ initConfig(rootDir);
191
+ return;
192
+ }
193
+ if (opts.installHook) {
194
+ installPreCommitHook(rootDir);
195
+ return;
196
+ }
197
+ // Load config
198
+ const configPath = opts.config || path.join(rootDir, 'atlisp-lint.json');
199
+ const config = (0, config_1.loadConfig)(fs.existsSync(configPath) ? configPath : undefined);
200
+ (0, locale_1.setLocale)(config.locale || 'zh');
201
+ // Collect files
202
+ const files = opts.staged ? collectStagedFiles(rootDir) : collectFiles(rootDir, opts, config);
203
+ if (files.length === 0) {
204
+ console.log((0, locale_1.t)('index.no_files'));
205
+ return;
206
+ }
207
+ // Phase 1: Python-style static checks
208
+ const issues = (0, runner_1.lintFiles)(files, config, rootDir);
209
+ // Phase 2: SBCL syntax validation
210
+ const stubPkgPath = path.join(__dirname, '..', 'stub-packages.json');
211
+ try {
212
+ const sbclIssues = (0, sbcl_1.runSbclLint)(rootDir, config.sbcl, stubPkgPath);
213
+ issues.push(...sbclIssues);
214
+ }
215
+ catch (err) {
216
+ const msg = err instanceof Error ? err.message : String(err);
217
+ issues.push({
218
+ file: 'sbcl', line: 1, severity: 'error', rule: 'sbcl',
219
+ message: msg,
220
+ });
221
+ }
222
+ // Format & output
223
+ const errorCount = issues.filter(i => i.severity === 'error').length;
224
+ const warningCount = issues.filter(i => i.severity === 'warn').length;
225
+ if (opts.format === 'json') {
226
+ console.log((0, formatters_1.formatJson)(issues));
227
+ }
228
+ else {
229
+ console.log((0, formatters_1.formatDefault)(issues));
230
+ }
231
+ process.exit(errorCount > 0 ? 1 : 0);
232
+ }
233
+ if (require.main === module) {
234
+ main();
235
+ }
236
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}