changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/ffi/tree-sitter/lang.lisp

changeset 698: 96958d3eb5b0
parent: 32995daa9a07
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
140
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
1
 ;;; ffi/tree-sitter/lang.lisp --- Tree-sitter Languages
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
2
 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
3
 ;; Tree-sitter language bindings.
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
4
 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
5
 ;; in subdirs of *TREE-SITTER-LANGUAGE-DIRECTORY*, there are two json
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
6
 ;; files: node-types.json and grammar.json.
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
7
 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
8
 ;; node-types: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
9
 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
10
 ;; parsers: https://tree-sitter.github.io/tree-sitter/#available-parsers
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
11
 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
12
 ;; ref: https://github.com/death/cl-tree-sitter
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
13
 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
14
 ;;; Code:
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
15
 (in-package :tree-sitter)
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
16
 
567
32995daa9a07 skel and cli updates
Richard Westhaver <ellis@rwest.io>
parents: 229
diff changeset
17
 (defvar *ts-langs* (make-hash-table))
32995daa9a07 skel and cli updates
Richard Westhaver <ellis@rwest.io>
parents: 229
diff changeset
18
 
140
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
19
 (defun language-module (name)
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
20
   (funcall 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
21
    (or (gethash (sb-int:keywordicate name) *ts-langs*) ;; symbol -> keyword, string must be UPCASE
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
22
        (error "tree-sitter language module not found: ~s." name))))
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
23
 
148
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
24
 (macrolet ((def-ts-lang-loader (lang)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
25
              (let ((name (symbolicate 'tree-sitter- lang)))
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
26
                (let ((fname (symbolicate 'load- name)))
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
27
                  `(prog1
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
28
                       (defun ,fname (&optional save)
229
7ca4cdbd52c2 bug fixes
Richard Westhaver <ellis@rwest.io>
parents: 148
diff changeset
29
                         (prog1 (sb-alien:load-shared-object ,(format nil "/usr/local/lib/libtree-sitter-~(~a~).so" lang)
148
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
30
                                                             :dont-save (not save))
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
31
                           (pushnew ,(sb-int:keywordicate name) *features*)))
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
32
                     (define-alien-routine ,name (* ts-language))
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
33
                     (setf (gethash ,(sb-int:keywordicate lang) *ts-langs*) ',name)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
34
                     (export '(,fname ,name)))))))
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
35
   (def-ts-lang-loader rust)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
36
   (def-ts-lang-loader json)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
37
   (def-ts-lang-loader c)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
38
   (def-ts-lang-loader bash)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
39
   (def-ts-lang-loader commonlisp)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
40
   (def-ts-lang-loader cpp)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
41
   (def-ts-lang-loader css)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
42
   (def-ts-lang-loader go)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
43
   (def-ts-lang-loader html)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
44
   (def-ts-lang-loader javascript)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
45
   (def-ts-lang-loader jsdoc)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
46
   (def-ts-lang-loader python)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
47
   (def-ts-lang-loader regex)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
48
   (def-ts-lang-loader typescript-tsx)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
49
   (def-ts-lang-loader typescript-typescript)
0d9d5cd46af5 added net/stream.rs, change def-ts-lang to macrolet form
ellis <ellis@rwest.io>
parents: 147
diff changeset
50
   (def-ts-lang-loader yaml))
140
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
51
 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
52
 (defun list-ts-langs () (loop for name being each hash-key of *ts-langs* collect name))
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
53
 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
54
 (defvar *tree-sitter-language-directory* #P"/usr/local/share/tree-sitter/")
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
55
 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
56
 (defun tree-sitter-language-files ()
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
57
   (let ((res))
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
58
     (sb-ext:map-directory 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
59
      (lambda (dir) (push (uiop:directory-files dir "*.json") res)) 
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
60
      *tree-sitter-language-directory*)
9b7ec8636a2d syn init and tree sitter doodles
ellis <ellis@rwest.io>
parents:
diff changeset
61
     (flatten res)))