changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/ffi/tree-sitter/pkg.lisp

changeset 523: 04d0a4f857f6
parent: 9e133c99b080
child: 08621be7e780
author: Richard Westhaver <ellis@rwest.io>
date: Sun, 07 Jul 2024 20:10:49 -0400
permissions: -rw-r--r--
description: tree-sitter ffi fixes
1 ;;; ffi/tree-sitter/pkg.lisp --- Tree-sitter FFI
2 
3 ;; Tree-sitter FFI for Lisp
4 
5 ;; Tree-sitter consists of the base library, which you can load using
6 ;; the LOAD-TREE-SITTER function, and the language parsers.
7 
8 ;; The language parser shared libraries should ALWAYS be located in
9 ;; /usr/local/lib/ and be prefixed with 'lib' like so:
10 ;; '/usr/local/lib/libtree-sitter-json.so'. Static libraries are not
11 ;; supported.
12 
13 ;; The language parsers have associated json files which should ALWAYS
14 ;; be stored in subdirectories of /usr/local/share/tree-sitter/ like
15 ;; so: '/usr/local/share/tree-sitter/json/grammar.json'.
16 
17 ;;; Code:
18 (defpackage :tree-sitter
19  (:nicknames :ts)
20  (:use :cl :std :sb-alien :std/alien)
21  (:export
22  :load-tree-sitter
23  :load-tree-sitter-alien
24  :tree-sitter-language-files
25  :*ts-langs*
26  :list-ts-langs
27  :*tree-sitter-language-directory*
28  :ts-state-id
29  :ts-symbol
30  :ts-field-id
31  :ts-language
32  :ts-parser
33  :ts-tree
34  :ts-query
35  :ts-query-cursor
36  :ts-query-error
37  :ts-lookahead-iterator
38  :ts-point
39  :ts-logger
40  :ts-node
41  :ts-tree-cursor
42  :ts-parser-new
43  :ts-parser-delete
44  :ts-parser-reset
45  :ts-parser-logger
46  :ts-parser-set-logger
47  :ts-parser-set-language
48  :ts-parser-language
49  :ts-parser-parse
50  :ts-parser-parse-string
51  :ts-parser-print-dot-graphs
52  :ts-tree-copy
53  :ts-tree-delete
54  :ts-tree-language
55  :ts-tree-edit
56  :ts-tree-print-dot-graph
57  :ts-node-type
58  :ts-node-symbol
59  :ts-node-language
60  :ts-node-grammar-type
61  :ts-node-grammar-symbol
62  :ts-node-start-byte
63  :ts-node-start-point
64  :ts-node-end-byte
65  :ts-node-end-point
66  :ts-node-string
67  :ts-node-is-null
68  :ts-node-eq
69  :ts-node-named-child
70  :ts-tree-cursor-new-pointer
71  :ts-tree-cursor-delete
72  :ts-tree-root-node
73  :ts-language-version
74  :ts-language-symbol-name
75  :ts-language-symbol-count
76  :ts-language-field-count
77  :ts-tree-cursor-current-field-name
78  :ts-tree-cursor-goto-next-sibling
79  :ts-tree-cursor-goto-parent
80  :ts-tree-cursor-goto-first-child
81  :ts-query-new
82  :ts-query-delete
83  :ts-tree-root-node-pointer
84  :ts-node-is-named-pointer
85  :ts-tree-cursor-current-node-pointer
86  :ts-node-start-point-pointer
87  :ts-node-end-point-pointer
88  :ts-node-type-pointer))
89 
90 (in-package :tree-sitter)
91 
92 (defun load-tree-sitter ()
93  (unless (member :tree-sitter *features*)
94  (sb-alien:load-shared-object (shared-object-name "tree-sitter") :dont-save t)
95  (load-tree-sitter-alien)
96  (push :tree-sitter *features*)))
97 
98 (defun load-tree-sitter-alien ()
99  (handler-bind ((simple-error
100  (lambda (condition)
101  (warn "failed to load libtree-sitter-alien.so --- make sure to follow the install instructions in lis/lib/ffi/tree-sitter/alien.c! ~a" condition))))
102  (sb-alien:load-shared-object "/usr/local/lib/libtree-sitter-alien.so" :dont-save nil)))