Skip to content

Commit 2d73a13

Browse files
committed
Updated to Tree-sitter ABI 15.
1 parent 6b02dfd commit 2d73a13

32 files changed

+3641
-2411
lines changed

CMakeLists.txt

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
cmake_minimum_required(VERSION 3.13)
2+
3+
project(tree-sitter-lua
4+
VERSION "0.1.0"
5+
DESCRIPTION "A lightweight, high-level, multi-paradigm programming language."
6+
HOMEPAGE_URL "https://github.com/panicinc/tree-sitter-lua"
7+
LANGUAGES C)
8+
9+
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
10+
option(TREE_SITTER_REUSE_ALLOCATOR "Reuse the library allocator" OFF)
11+
12+
set(TREE_SITTER_ABI_VERSION 15 CACHE STRING "Tree-sitter ABI version")
13+
if(NOT ${TREE_SITTER_ABI_VERSION} MATCHES "^[0-9]+$")
14+
unset(TREE_SITTER_ABI_VERSION CACHE)
15+
message(FATAL_ERROR "TREE_SITTER_ABI_VERSION must be an integer")
16+
endif()
17+
18+
find_program(TREE_SITTER_CLI tree-sitter DOC "Tree-sitter CLI")
19+
20+
add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/parser.c"
21+
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/grammar.json"
22+
COMMAND "${TREE_SITTER_CLI}" generate src/grammar.json
23+
--abi=${TREE_SITTER_ABI_VERSION}
24+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
25+
COMMENT "Generating parser.c")
26+
27+
add_library(tree-sitter-lua src/parser.c)
28+
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/scanner.c)
29+
target_sources(tree-sitter-lua PRIVATE src/scanner.c)
30+
endif()
31+
target_include_directories(tree-sitter-lua
32+
PRIVATE src
33+
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/bindings/c>
34+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
35+
36+
target_compile_definitions(tree-sitter-lua PRIVATE
37+
$<$<BOOL:${TREE_SITTER_REUSE_ALLOCATOR}>:TREE_SITTER_REUSE_ALLOCATOR>
38+
$<$<CONFIG:Debug>:TREE_SITTER_DEBUG>)
39+
40+
set_target_properties(tree-sitter-lua
41+
PROPERTIES
42+
C_STANDARD 11
43+
POSITION_INDEPENDENT_CODE ON
44+
SOVERSION "${TREE_SITTER_ABI_VERSION}.${PROJECT_VERSION_MAJOR}"
45+
DEFINE_SYMBOL "")
46+
47+
configure_file(bindings/c/tree-sitter-lua.pc.in
48+
"${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-lua.pc" @ONLY)
49+
50+
include(GNUInstallDirs)
51+
52+
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bindings/c/tree_sitter"
53+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
54+
FILES_MATCHING PATTERN "*.h")
55+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-lua.pc"
56+
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig")
57+
install(TARGETS tree-sitter-lua
58+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
59+
60+
file(GLOB QUERIES queries/*.scm)
61+
install(FILES ${QUERIES}
62+
DESTINATION "${CMAKE_INSTALL_DATADIR}/tree-sitter/queries/lua")
63+
64+
add_custom_target(ts-test "${TREE_SITTER_CLI}" test
65+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
66+
COMMENT "tree-sitter test")

Makefile

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
ifeq ($(OS),Windows_NT)
2+
$(error Windows is not supported)
3+
endif
4+
5+
LANGUAGE_NAME := tree-sitter-lua
6+
HOMEPAGE_URL := https://github.com/panicinc/tree-sitter-lua
7+
VERSION := 0.1.0
8+
9+
# repository
10+
SRC_DIR := src
11+
12+
TS ?= tree-sitter
13+
14+
# install directory layout
15+
PREFIX ?= /usr/local
16+
DATADIR ?= $(PREFIX)/share
17+
INCLUDEDIR ?= $(PREFIX)/include
18+
LIBDIR ?= $(PREFIX)/lib
19+
PCLIBDIR ?= $(LIBDIR)/pkgconfig
20+
21+
# source/object files
22+
PARSER := $(SRC_DIR)/parser.c
23+
EXTRAS := $(filter-out $(PARSER),$(wildcard $(SRC_DIR)/*.c))
24+
OBJS := $(patsubst %.c,%.o,$(PARSER) $(EXTRAS))
25+
26+
# flags
27+
ARFLAGS ?= rcs
28+
override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC
29+
30+
# ABI versioning
31+
SONAME_MAJOR = $(shell sed -n 's/\#define LANGUAGE_VERSION //p' $(PARSER))
32+
SONAME_MINOR = $(word 1,$(subst ., ,$(VERSION)))
33+
34+
# OS-specific bits
35+
ifeq ($(shell uname),Darwin)
36+
SOEXT = dylib
37+
SOEXTVER_MAJOR = $(SONAME_MAJOR).$(SOEXT)
38+
SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).$(SOEXT)
39+
LINKSHARED = -dynamiclib -Wl,-install_name,$(LIBDIR)/lib$(LANGUAGE_NAME).$(SOEXTVER),-rpath,@executable_path/../Frameworks
40+
else
41+
SOEXT = so
42+
SOEXTVER_MAJOR = $(SOEXT).$(SONAME_MAJOR)
43+
SOEXTVER = $(SOEXT).$(SONAME_MAJOR).$(SONAME_MINOR)
44+
LINKSHARED = -shared -Wl,-soname,lib$(LANGUAGE_NAME).$(SOEXTVER)
45+
endif
46+
ifneq ($(filter $(shell uname),FreeBSD NetBSD DragonFly),)
47+
PCLIBDIR := $(PREFIX)/libdata/pkgconfig
48+
endif
49+
50+
all: lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) $(LANGUAGE_NAME).pc
51+
52+
lib$(LANGUAGE_NAME).a: $(OBJS)
53+
$(AR) $(ARFLAGS) $@ $^
54+
55+
lib$(LANGUAGE_NAME).$(SOEXT): $(OBJS)
56+
$(CC) $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@
57+
ifneq ($(STRIP),)
58+
$(STRIP) $@
59+
endif
60+
61+
$(LANGUAGE_NAME).pc: bindings/c/$(LANGUAGE_NAME).pc.in
62+
sed -e 's|@PROJECT_VERSION@|$(VERSION)|' \
63+
-e 's|@CMAKE_INSTALL_LIBDIR@|$(LIBDIR:$(PREFIX)/%=%)|' \
64+
-e 's|@CMAKE_INSTALL_INCLUDEDIR@|$(INCLUDEDIR:$(PREFIX)/%=%)|' \
65+
-e 's|@PROJECT_DESCRIPTION@|$(DESCRIPTION)|' \
66+
-e 's|@PROJECT_HOMEPAGE_URL@|$(HOMEPAGE_URL)|' \
67+
-e 's|@CMAKE_INSTALL_PREFIX@|$(PREFIX)|' $< > $@
68+
69+
$(PARSER): $(SRC_DIR)/grammar.json
70+
$(TS) generate $^
71+
72+
install: all
73+
install -d '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/lua '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter '$(DESTDIR)$(PCLIBDIR)' '$(DESTDIR)$(LIBDIR)'
74+
install -m644 bindings/c/tree_sitter/$(LANGUAGE_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h
75+
install -m644 $(LANGUAGE_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc
76+
install -m644 lib$(LANGUAGE_NAME).a '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a
77+
install -m755 lib$(LANGUAGE_NAME).$(SOEXT) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER)
78+
ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR)
79+
ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT)
80+
install -m644 queries/*.scm '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/lua
81+
82+
uninstall:
83+
$(RM) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a \
84+
'$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) \
85+
'$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) \
86+
'$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) \
87+
'$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h \
88+
'$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc
89+
$(RM) -r '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/lua
90+
91+
clean:
92+
$(RM) $(OBJS) $(LANGUAGE_NAME).pc lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT)
93+
94+
test:
95+
$(TS) test
96+
97+
.PHONY: all install uninstall clean test

bindings/c/tree-sitter-lua.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#ifndef TREE_SITTER_LUA_H_
2+
#define TREE_SITTER_LUA_H_
3+
4+
typedef struct TSLanguage TSLanguage;
5+
6+
#ifdef __cplusplus
7+
extern "C" {
8+
#endif
9+
10+
const TSLanguage *tree_sitter_lua(void);
11+
12+
#ifdef __cplusplus
13+
}
14+
#endif
15+
16+
#endif // TREE_SITTER_LUA_H_

bindings/c/tree-sitter-lua.pc.in

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
prefix=@PREFIX@
2+
libdir=@LIBDIR@
3+
includedir=@INCLUDEDIR@
4+
5+
Name: tree-sitter-lua
6+
Description: Lua grammar for tree-sitter
7+
URL: @URL@
8+
Version: @VERSION@
9+
Requires: @REQUIRES@
10+
Libs: -L${libdir} @ADDITIONAL_LIBS@ -ltree-sitter-lua
11+
Cflags: -I${includedir}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#ifndef TREE_SITTER_LUA_H_
2+
#define TREE_SITTER_LUA_H_
3+
4+
typedef struct TSLanguage TSLanguage;
5+
6+
#ifdef __cplusplus
7+
extern "C" {
8+
#endif
9+
10+
const TSLanguage *tree_sitter_lua(void);
11+
12+
#ifdef __cplusplus
13+
}
14+
#endif
15+
16+
#endif // TREE_SITTER_LUA_H_

bindings/go/binding.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package tree_sitter_lua
2+
3+
// #cgo CFLAGS: -std=c11 -fPIC
4+
// #include "../../src/parser.c"
5+
// // NOTE: if your language has an external scanner, add it here.
6+
import "C"
7+
8+
import "unsafe"
9+
10+
// Get the tree-sitter Language for this grammar.
11+
func Language() unsafe.Pointer {
12+
return unsafe.Pointer(C.tree_sitter_lua())
13+
}

bindings/go/binding_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package tree_sitter_lua_test
2+
3+
import (
4+
"testing"
5+
6+
tree_sitter "github.com/smacker/go-tree-sitter"
7+
"github.com/tree-sitter/tree-sitter-lua"
8+
)
9+
10+
func TestCanLoadGrammar(t *testing.T) {
11+
language := tree_sitter.NewLanguage(tree_sitter_lua.Language())
12+
if language == nil {
13+
t.Errorf("Error loading Lua grammar")
14+
}
15+
}

bindings/go/go.mod

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module github.com/tree-sitter/tree-sitter-lua
2+
3+
go 1.22
4+
5+
require github.com/smacker/go-tree-sitter v0.0.0-20230720070738-0d0a9f78d8f8

bindings/node/binding_test.js

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindings/node/index.d.ts

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)