From 4820d50336f78aed7f86a0b2fadab60245cbd25c Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Thu, 23 Jan 2025 20:08:51 -0500 Subject: [PATCH] fix(init): handle parser name replacements better when a `kebab-case` name is expected --- cli/src/init.rs | 11 ++++++++--- cli/src/templates/build.rs | 2 +- cli/src/templates/cmakelists.cmake | 22 +++++++++++----------- cli/src/templates/index.js | 2 +- cli/src/templates/makefile | 8 ++++---- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/cli/src/init.rs b/cli/src/init.rs index ef79d2f4..3239ebed 100644 --- a/cli/src/init.rs +++ b/cli/src/init.rs @@ -24,6 +24,7 @@ const PARSER_NAME_PLACEHOLDER: &str = "PARSER_NAME"; const CAMEL_PARSER_NAME_PLACEHOLDER: &str = "CAMEL_PARSER_NAME"; const UPPER_PARSER_NAME_PLACEHOLDER: &str = "UPPER_PARSER_NAME"; const LOWER_PARSER_NAME_PLACEHOLDER: &str = "LOWER_PARSER_NAME"; +const KEBAB_PARSER_NAME_PLACEHOLDER: &str = "KEBAB_PARSER_NAME"; const PARSER_CLASS_NAME_PLACEHOLDER: &str = "PARSER_CLASS_NAME"; const PARSER_DESCRIPTION_PLACEHOLDER: &str = "PARSER_DESCRIPTION"; @@ -403,13 +404,13 @@ pub fn generate_grammar_files( // Generate C bindings if tree_sitter_config.bindings.c { missing_path(bindings_dir.join("c"), create_dir)?.apply(|path| { - let old_file = &path.join(format!("tree-sitter-{language_name}.h")); + let old_file = &path.join(format!("tree-sitter-{}.h", language_name.to_kebab_case())); if allow_update && fs::exists(old_file).unwrap_or(false) { fs::remove_file(old_file)?; } missing_path(path.join("tree_sitter"), create_dir)?.apply(|include_path| { missing_path( - include_path.join(format!("tree-sitter-{language_name}.h")), + include_path.join(format!("tree-sitter-{}.h", language_name.to_kebab_case())), |path| { generate_file(path, PARSER_NAME_H_TEMPLATE, language_name, &generate_opts) }, @@ -418,7 +419,7 @@ pub fn generate_grammar_files( })?; missing_path( - path.join(format!("tree-sitter-{language_name}.pc.in")), + path.join(format!("tree-sitter-{}.pc.in", language_name.to_kebab_case())), |path| { generate_file( path, @@ -709,6 +710,10 @@ fn generate_file( LOWER_PARSER_NAME_PLACEHOLDER, &language_name.to_snake_case(), ) + .replace( + KEBAB_PARSER_NAME_PLACEHOLDER, + &language_name.to_kebab_case(), + ) .replace(PARSER_NAME_PLACEHOLDER, language_name) .replace(CLI_VERSION_PLACEHOLDER, CLI_VERSION) .replace(RUST_BINDING_VERSION_PLACEHOLDER, RUST_BINDING_VERSION) diff --git a/cli/src/templates/build.rs b/cli/src/templates/build.rs index 858e80c2..5ef59e52 100644 --- a/cli/src/templates/build.rs +++ b/cli/src/templates/build.rs @@ -17,5 +17,5 @@ fn main() { println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); } - c_config.compile("tree-sitter-PARSER_NAME"); + c_config.compile("tree-sitter-KEBAB_PARSER_NAME"); } diff --git a/cli/src/templates/cmakelists.cmake b/cli/src/templates/cmakelists.cmake index e8ba9a6c..ee6fe2b4 100644 --- a/cli/src/templates/cmakelists.cmake +++ b/cli/src/templates/cmakelists.cmake @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.13) -project(tree-sitter-PARSER_NAME +project(tree-sitter-KEBAB_PARSER_NAME VERSION "PARSER_VERSION" DESCRIPTION "PARSER_DESCRIPTION" HOMEPAGE_URL "PARSER_URL" @@ -24,42 +24,42 @@ add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/parser.c" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMENT "Generating parser.c") -add_library(tree-sitter-PARSER_NAME src/parser.c) +add_library(tree-sitter-KEBAB_PARSER_NAME src/parser.c) if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/scanner.c) - target_sources(tree-sitter-PARSER_NAME PRIVATE src/scanner.c) + target_sources(tree-sitter-KEBAB_PARSER_NAME PRIVATE src/scanner.c) endif() -target_include_directories(tree-sitter-PARSER_NAME +target_include_directories(tree-sitter-KEBAB_PARSER_NAME PRIVATE src INTERFACE $ $) -target_compile_definitions(tree-sitter-PARSER_NAME PRIVATE +target_compile_definitions(tree-sitter-KEBAB_PARSER_NAME PRIVATE $<$:TREE_SITTER_REUSE_ALLOCATOR> $<$:TREE_SITTER_DEBUG>) -set_target_properties(tree-sitter-PARSER_NAME +set_target_properties(tree-sitter-KEBAB_PARSER_NAME PROPERTIES C_STANDARD 11 POSITION_INDEPENDENT_CODE ON SOVERSION "${TREE_SITTER_ABI_VERSION}.${PROJECT_VERSION_MAJOR}" DEFINE_SYMBOL "") -configure_file(bindings/c/tree-sitter-PARSER_NAME.pc.in - "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-PARSER_NAME.pc" @ONLY) +configure_file(bindings/c/tree-sitter-KEBAB_PARSER_NAME.pc.in + "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-KEBAB_PARSER_NAME.pc" @ONLY) include(GNUInstallDirs) install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bindings/c/tree_sitter" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.h") -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-PARSER_NAME.pc" +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-KEBAB_PARSER_NAME.pc" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig") -install(TARGETS tree-sitter-PARSER_NAME +install(TARGETS tree-sitter-KEBAB_PARSER_NAME LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") file(GLOB QUERIES queries/*.scm) install(FILES ${QUERIES} - DESTINATION "${CMAKE_INSTALL_DATADIR}/tree-sitter/queries/PARSER_NAME") + DESTINATION "${CMAKE_INSTALL_DATADIR}/tree-sitter/queries/KEBAB_PARSER_NAME") add_custom_target(ts-test "${TREE_SITTER_CLI}" test WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" diff --git a/cli/src/templates/index.js b/cli/src/templates/index.js index 88437495..cbbaa32f 100644 --- a/cli/src/templates/index.js +++ b/cli/src/templates/index.js @@ -3,7 +3,7 @@ const root = require("path").join(__dirname, "..", ".."); module.exports = typeof process.versions.bun === "string" // Support `bun build --compile` by being statically analyzable enough to find the .node file at build-time - ? require(`../../prebuilds/${process.platform}-${process.arch}/tree-sitter-PARSER_NAME.node`) + ? require(`../../prebuilds/${process.platform}-${process.arch}/tree-sitter-KEBAB_PARSER_NAME.node`) : require("node-gyp-build")(root); try { diff --git a/cli/src/templates/makefile b/cli/src/templates/makefile index ddb47821..1aa71026 100644 --- a/cli/src/templates/makefile +++ b/cli/src/templates/makefile @@ -2,7 +2,7 @@ ifeq ($(OS),Windows_NT) $(error Windows is not supported) endif -LANGUAGE_NAME := tree-sitter-PARSER_NAME +LANGUAGE_NAME := tree-sitter-KEBAB_PARSER_NAME HOMEPAGE_URL := PARSER_URL VERSION := PARSER_VERSION @@ -70,14 +70,14 @@ $(PARSER): $(SRC_DIR)/grammar.json $(TS) generate $^ install: all - install -d '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/PARSER_NAME '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter '$(DESTDIR)$(PCLIBDIR)' '$(DESTDIR)$(LIBDIR)' + install -d '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/KEBAB_PARSER_NAME '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter '$(DESTDIR)$(PCLIBDIR)' '$(DESTDIR)$(LIBDIR)' install -m644 bindings/c/tree_sitter/$(LANGUAGE_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h install -m644 $(LANGUAGE_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc install -m644 lib$(LANGUAGE_NAME).a '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a install -m755 lib$(LANGUAGE_NAME).$(SOEXT) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) - install -m644 queries/*.scm '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/PARSER_NAME + install -m644 queries/*.scm '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/KEBAB_PARSER_NAME uninstall: $(RM) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a \ @@ -86,7 +86,7 @@ uninstall: '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) \ '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h \ '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc - $(RM) -r '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/PARSER_NAME + $(RM) -r '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/KEBAB_PARSER_NAME clean: $(RM) $(OBJS) $(LANGUAGE_NAME).pc lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT)