@plurnk/plurnk-mimetypes-text-common-lisp 0.2.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.
@@ -0,0 +1,7 @@
1
+ import { BaseHandler } from "@plurnk/plurnk-mimetypes";
2
+ import type { HandlerContent, MimeSymbol } from "@plurnk/plurnk-mimetypes";
3
+ export default class TextCommonLisp extends BaseHandler {
4
+ extractRaw(content: HandlerContent): MimeSymbol[];
5
+ deepJson(content: HandlerContent): unknown;
6
+ }
7
+ //# sourceMappingURL=TextCommonLisp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextCommonLisp.d.ts","sourceRoot":"","sources":["../src/TextCommonLisp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAc,MAAM,0BAA0B,CAAC;AAevF,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IAC1C,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,EAAE;IAejD,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO;CAWtD"}
@@ -0,0 +1,393 @@
1
+ import { BaseHandler } from "@plurnk/plurnk-mimetypes";
2
+ // text/x-common-lisp handler. Hand-rolled S-expression scanner.
3
+ //
4
+ // The grammars-v4 `lisp` grammar is a McCarthy-1960 toy (can't tokenize
5
+ // `+`, hyphens, or uppercase). We bypass ANTLR entirely and implement a
6
+ // minimal scanner that handles real Common Lisp syntax:
7
+ // - parens, atoms, strings, char literals (#\...)
8
+ // - quote, backquote, comma, comma-at (',`,,@) — opaque
9
+ // - line comments (;) and block comments (#| ... |#)
10
+ // - reader macros (#', #(, #+, #-, etc.) — best-effort handling
11
+ //
12
+ // We don't build a full AST. We walk top-level forms, record their head
13
+ // atom (defun / defmacro / defclass / etc.), and use it to dispatch a
14
+ // symbol emission with the second atom as the declared name.
15
+ export default class TextCommonLisp extends BaseHandler {
16
+ extractRaw(content) {
17
+ if (typeof content !== "string")
18
+ return [];
19
+ try {
20
+ return extractCommonLisp(content);
21
+ }
22
+ catch {
23
+ return [];
24
+ }
25
+ }
26
+ // Deep-channel (issue #10). For an S-expression language, the natural
27
+ // deep-tree is one node per top-level form carrying its head atom (defun,
28
+ // defmacro, etc.), declared name, and source range. Coarser than a full
29
+ // S-expression AST (Common Lisp's sub-form structure isn't navigable
30
+ // anyway — macros transform it freely) but enough for jsonpath like
31
+ // \$.children[?(@.head=='defun')] to find all function definitions.
32
+ deepJson(content) {
33
+ if (typeof content !== "string")
34
+ return null;
35
+ try {
36
+ const children = extractForms(content);
37
+ return { type: "program", line: 1, endLine: children.length > 0
38
+ ? children[children.length - 1].endLine
39
+ : 1, children };
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ }
46
+ function extractForms(src) {
47
+ const out = [];
48
+ const scanner = new Scanner(src);
49
+ while (!scanner.eof()) {
50
+ const form = scanner.readTopLevelForm();
51
+ if (!form)
52
+ break;
53
+ if (form.head) {
54
+ const node = {
55
+ type: form.head,
56
+ line: form.line,
57
+ endLine: form.endLine,
58
+ };
59
+ if (form.secondAtom !== null)
60
+ node.name = form.secondAtom;
61
+ if (form.paramAtoms.length > 0)
62
+ node.params = form.paramAtoms;
63
+ out.push(node);
64
+ }
65
+ }
66
+ return out;
67
+ }
68
+ function extractCommonLisp(src) {
69
+ const symbols = [];
70
+ const scanner = new Scanner(src);
71
+ while (!scanner.eof()) {
72
+ const form = scanner.readTopLevelForm();
73
+ if (!form)
74
+ break;
75
+ if (form.head)
76
+ emit(symbols, form);
77
+ }
78
+ return symbols;
79
+ }
80
+ function emit(out, form) {
81
+ const dispatch = (kind, withParams = false) => {
82
+ if (!form.secondAtom)
83
+ return;
84
+ const sym = {
85
+ name: form.secondAtom,
86
+ kind,
87
+ line: form.line,
88
+ endLine: form.endLine,
89
+ };
90
+ if (withParams)
91
+ sym.params = form.paramAtoms;
92
+ out.push(sym);
93
+ };
94
+ switch (form.head.toLowerCase()) {
95
+ case "defun":
96
+ case "defmacro":
97
+ dispatch("function", true);
98
+ return;
99
+ case "defgeneric":
100
+ dispatch("function", true);
101
+ return;
102
+ case "defmethod":
103
+ dispatch("method", true);
104
+ return;
105
+ case "defparameter":
106
+ case "defvar":
107
+ dispatch("variable");
108
+ return;
109
+ case "defconstant":
110
+ dispatch("constant");
111
+ return;
112
+ case "defclass":
113
+ case "defstruct":
114
+ dispatch("class");
115
+ return;
116
+ case "deftype":
117
+ dispatch("type");
118
+ return;
119
+ case "defpackage":
120
+ dispatch("module");
121
+ return;
122
+ default:
123
+ return;
124
+ }
125
+ }
126
+ // Scanner — minimal S-expression reader. Tracks position + line numbers.
127
+ // We don't care about expression VALUES — we care about the SHAPE: where
128
+ // each top-level form starts/ends and what its first two atoms are.
129
+ class Scanner {
130
+ #src;
131
+ #i = 0;
132
+ #line = 1;
133
+ constructor(src) {
134
+ this.#src = src;
135
+ }
136
+ eof() {
137
+ this.skipWhitespaceAndComments();
138
+ return this.#i >= this.#src.length;
139
+ }
140
+ readTopLevelForm() {
141
+ this.skipWhitespaceAndComments();
142
+ if (this.#i >= this.#src.length)
143
+ return null;
144
+ const startLine = this.#line;
145
+ // Top-level reader macros like #+feature (form ...) — we treat them
146
+ // as the form's prefix: skip the #+/-feature directive, then read.
147
+ this.skipReaderMacroPrefix();
148
+ const ch = this.#src[this.#i];
149
+ if (ch !== "(") {
150
+ // A bare atom at top level (unusual). Skip it.
151
+ this.skipAtom();
152
+ return { head: "", secondAtom: null, line: startLine, endLine: this.#line, paramAtoms: [] };
153
+ }
154
+ // Open paren: read the head atom (or skip if a nested list comes
155
+ // first), then collect the second atom and a parameter vector if
156
+ // the third form is a list.
157
+ this.#i += 1; // consume (
158
+ const head = this.readNextAtomInList();
159
+ const secondAtom = head !== "" ? this.readNextAtomInList() : null;
160
+ const paramAtoms = this.tryReadParamList();
161
+ this.skipToMatchingClose();
162
+ const endLine = this.#line;
163
+ return { head, secondAtom, line: startLine, endLine, paramAtoms };
164
+ }
165
+ // Read the next atom in the current list context. Stops at ')' or
166
+ // before a nested '(' (returning ""). Consumes the atom on success.
167
+ readNextAtomInList() {
168
+ this.skipWhitespaceAndCommentsAndReaderMacros();
169
+ if (this.#i >= this.#src.length)
170
+ return "";
171
+ const ch = this.#src[this.#i];
172
+ if (ch === ")" || ch === "(" || ch === undefined)
173
+ return "";
174
+ return this.readAtom();
175
+ }
176
+ // After the head + name, the next form is often a parameter list:
177
+ // (defun foo (a b c) body) — list of param atoms.
178
+ // For defmethod: (defmethod foo ((x type) y) body) — params are mixed
179
+ // typed/untyped specifiers; we emit each first element.
180
+ // Returns [] if the next form isn't a list.
181
+ tryReadParamList() {
182
+ this.skipWhitespaceAndCommentsAndReaderMacros();
183
+ if (this.#src[this.#i] !== "(")
184
+ return [];
185
+ this.#i += 1; // consume (
186
+ const params = [];
187
+ // Common Lisp lambda-list keywords mark the boundary between
188
+ // "real" required params and special collectors. We stop adding
189
+ // params at the first `&` keyword so the outline shows only the
190
+ // canonical positional names.
191
+ let stopped = false;
192
+ while (this.#i < this.#src.length) {
193
+ this.skipWhitespaceAndCommentsAndReaderMacros();
194
+ const ch = this.#src[this.#i];
195
+ if (ch === ")" || ch === undefined) {
196
+ if (ch === ")")
197
+ this.#i += 1;
198
+ break;
199
+ }
200
+ if (ch === "(") {
201
+ this.#i += 1;
202
+ const inner = this.readNextAtomInList();
203
+ this.skipToMatchingClose();
204
+ if (!stopped && inner && !inner.startsWith("&"))
205
+ params.push(inner);
206
+ continue;
207
+ }
208
+ const atom = this.readAtom();
209
+ if (atom.startsWith("&")) {
210
+ stopped = true;
211
+ continue;
212
+ }
213
+ if (!stopped && atom)
214
+ params.push(atom);
215
+ }
216
+ return params;
217
+ }
218
+ // Skip from current position to the matching close paren, tracking
219
+ // nesting and string/comment context. Used after we've extracted what
220
+ // we need from the head of a form.
221
+ skipToMatchingClose() {
222
+ let depth = 1; // we're inside one open paren
223
+ while (this.#i < this.#src.length && depth > 0) {
224
+ this.skipWhitespaceAndCommentsAndReaderMacros();
225
+ const ch = this.#src[this.#i];
226
+ if (ch === undefined)
227
+ break;
228
+ if (ch === "(") {
229
+ depth += 1;
230
+ this.#i += 1;
231
+ }
232
+ else if (ch === ")") {
233
+ depth -= 1;
234
+ this.#i += 1;
235
+ }
236
+ else if (ch === '"') {
237
+ this.skipString();
238
+ }
239
+ else {
240
+ this.skipAtom();
241
+ }
242
+ }
243
+ }
244
+ readAtom() {
245
+ const start = this.#i;
246
+ while (this.#i < this.#src.length) {
247
+ const c = this.#src[this.#i];
248
+ if (this.isAtomTerminator(c))
249
+ break;
250
+ // Char literal #\x — consume the char and stop.
251
+ if (c === "#" && this.#src[this.#i + 1] === "\\") {
252
+ this.#i += 2;
253
+ if (this.#i < this.#src.length) {
254
+ // Read named char (Space, Newline, etc.) — a span of letters.
255
+ while (this.#i < this.#src.length && /[A-Za-z0-9_-]/.test(this.#src[this.#i])) {
256
+ this.#i += 1;
257
+ }
258
+ }
259
+ continue;
260
+ }
261
+ // String mid-atom: shouldn't happen in well-formed code; bail.
262
+ if (c === '"')
263
+ break;
264
+ this.#i += 1;
265
+ }
266
+ return this.#src.slice(start, this.#i);
267
+ }
268
+ skipAtom() {
269
+ this.readAtom();
270
+ }
271
+ skipString() {
272
+ if (this.#src[this.#i] !== '"')
273
+ return;
274
+ this.#i += 1; // consume opening
275
+ while (this.#i < this.#src.length) {
276
+ const c = this.#src[this.#i];
277
+ if (c === "\\" && this.#i + 1 < this.#src.length) {
278
+ if (this.#src[this.#i + 1] === "\n")
279
+ this.#line += 1;
280
+ this.#i += 2;
281
+ continue;
282
+ }
283
+ if (c === '"') {
284
+ this.#i += 1;
285
+ return;
286
+ }
287
+ if (c === "\n")
288
+ this.#line += 1;
289
+ this.#i += 1;
290
+ }
291
+ }
292
+ skipWhitespaceAndComments() {
293
+ while (this.#i < this.#src.length) {
294
+ const c = this.#src[this.#i];
295
+ if (c === " " || c === "\t" || c === "\r") {
296
+ this.#i += 1;
297
+ }
298
+ else if (c === "\n") {
299
+ this.#line += 1;
300
+ this.#i += 1;
301
+ }
302
+ else if (c === ";") {
303
+ while (this.#i < this.#src.length && this.#src[this.#i] !== "\n")
304
+ this.#i += 1;
305
+ }
306
+ else if (c === "#" && this.#src[this.#i + 1] === "|") {
307
+ this.skipBlockComment();
308
+ }
309
+ else {
310
+ return;
311
+ }
312
+ }
313
+ }
314
+ skipWhitespaceAndCommentsAndReaderMacros() {
315
+ for (;;) {
316
+ const before = this.#i;
317
+ this.skipWhitespaceAndComments();
318
+ this.skipReaderMacroPrefix();
319
+ if (this.#i === before)
320
+ return;
321
+ }
322
+ }
323
+ // Skip reader macros that PREFIX a form, not consume the form itself:
324
+ // ' ` , ,@ #' #+feat #-feat #. #s(...)
325
+ // For #+/-feature we consume the feature expression (an atom or a
326
+ // parenthesized expression).
327
+ skipReaderMacroPrefix() {
328
+ const c = this.#src[this.#i];
329
+ if (c === "'" || c === "`") {
330
+ this.#i += 1;
331
+ return;
332
+ }
333
+ if (c === ",") {
334
+ this.#i += 1;
335
+ if (this.#src[this.#i] === "@")
336
+ this.#i += 1;
337
+ return;
338
+ }
339
+ if (c === "#") {
340
+ const n = this.#src[this.#i + 1];
341
+ if (n === "'" || n === "." || n === ":") {
342
+ this.#i += 2;
343
+ return;
344
+ }
345
+ if (n === "+" || n === "-") {
346
+ this.#i += 2;
347
+ this.skipWhitespaceAndComments();
348
+ // Skip the feature expression (atom or parenthesized).
349
+ if (this.#src[this.#i] === "(") {
350
+ this.#i += 1;
351
+ this.skipToMatchingClose();
352
+ }
353
+ else {
354
+ this.skipAtom();
355
+ }
356
+ return;
357
+ }
358
+ if (n === "(") {
359
+ // #( vector literal — leave the '(' for the caller.
360
+ this.#i += 1;
361
+ return;
362
+ }
363
+ // Other dispatch: best-effort consume the # and let caller
364
+ // handle the rest.
365
+ }
366
+ }
367
+ skipBlockComment() {
368
+ // Already at #|. Consume and find matching |# (nested-aware).
369
+ this.#i += 2;
370
+ let depth = 1;
371
+ while (this.#i < this.#src.length && depth > 0) {
372
+ const c = this.#src[this.#i];
373
+ if (c === "#" && this.#src[this.#i + 1] === "|") {
374
+ depth += 1;
375
+ this.#i += 2;
376
+ }
377
+ else if (c === "|" && this.#src[this.#i + 1] === "#") {
378
+ depth -= 1;
379
+ this.#i += 2;
380
+ }
381
+ else {
382
+ if (c === "\n")
383
+ this.#line += 1;
384
+ this.#i += 1;
385
+ }
386
+ }
387
+ }
388
+ isAtomTerminator(c) {
389
+ return c === " " || c === "\t" || c === "\r" || c === "\n"
390
+ || c === "(" || c === ")" || c === ";";
391
+ }
392
+ }
393
+ //# sourceMappingURL=TextCommonLisp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextCommonLisp.js","sourceRoot":"","sources":["../src/TextCommonLisp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { default } from "./TextCommonLisp.ts";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { default } from "./TextCommonLisp.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@plurnk/plurnk-mimetypes-text-common-lisp",
3
+ "version": "0.2.0",
4
+ "description": "text/x-common-lisp mimetype handler for plurnk-service. Hand-rolled S-expression scanner (no ANTLR).",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "engines": {
11
+ "node": ">=25"
12
+ },
13
+ "plurnk": {
14
+ "kind": "mimetype",
15
+ "handlers": [
16
+ {
17
+ "name": "text/x-common-lisp",
18
+ "glyph": "λ",
19
+ "extensions": [
20
+ ".lisp",
21
+ ".lsp",
22
+ ".cl",
23
+ ".asd"
24
+ ]
25
+ }
26
+ ]
27
+ },
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "default": "./dist/index.js"
32
+ },
33
+ "./package.json": "./package.json"
34
+ },
35
+ "files": [
36
+ "dist/**/*",
37
+ "README.md"
38
+ ],
39
+ "scripts": {
40
+ "test:lint": "tsc --noEmit",
41
+ "test:unit": "node --test src/**/*.test.ts",
42
+ "test": "npm run test:lint && npm run test:unit",
43
+ "build:dist": "tsc -p tsconfig.build.json",
44
+ "build": "npm run build:dist",
45
+ "prepare": "npm run build"
46
+ },
47
+ "dependencies": {
48
+ "@plurnk/plurnk-mimetypes": "0.10.0"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^25.8.0",
52
+ "typescript": "^6.0.3"
53
+ }
54
+ }