[workspace]
default-members = ["crates/cli"]
members = [
  "crates/cli",
  "crates/config",
  "crates/generate",
  "crates/highlight",
  "crates/loader",
  "crates/tags",
  "crates/xtask",
  "crates/language",
  "lib",
]
resolver = "2"

[workspace.package]
version = "0.26.8"
authors = [
  "Max Brunsfeld <maxbrunsfeld@gmail.com>",
  "Amaan Qureshi <amaanq12@gmail.com>",
]
edition = "2021"
rust-version = "1.84"
homepage = "https://tree-sitter.github.io/tree-sitter"
repository = "https://github.com/tree-sitter/tree-sitter"
license = "MIT"
keywords = ["incremental", "parsing"]
categories = ["command-line-utilities", "parsing"]

[workspace.lints.clippy]
dbg_macro = "deny"
todo = "deny"
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
cargo = { level = "warn", priority = -1 }

# The lints below are a specific subset of the pedantic+nursery lints
# that we explicitly allow in the tree-sitter codebase because they either:
#
# 1. Contain false positives,
# 2. Are unnecessary, or
# 3. Worsen the code

branches_sharing_code = "allow"
cast_lossless = "allow"
cast_possible_truncation = "allow"
cast_possible_wrap = "allow"
cast_precision_loss = "allow"
cast_sign_loss = "allow"
checked_conversions = "allow"
cognitive_complexity = "allow"
collection_is_never_read = "allow"
fallible_impl_from = "allow"
fn_params_excessive_bools = "allow"
inline_always = "allow"
if_not_else = "allow"
items_after_statements = "allow"
match_wildcard_for_single_variants = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
module_name_repetitions = "allow"
multiple_crate_versions = "allow"
needless_for_each = "allow"
obfuscated_if_else = "allow"
option_if_let_else = "allow"
or_fun_call = "allow"
range_plus_one = "allow"
redundant_clone = "allow"
redundant_closure_for_method_calls = "allow"
ref_option = "allow"
similar_names = "allow"
string_lit_as_bytes = "allow"
struct_excessive_bools = "allow"
struct_field_names = "allow"
transmute_undefined_repr = "allow"
too_many_lines = "allow"
unnecessary_wraps = "allow"
unused_self = "allow"
used_underscore_items = "allow"

[workspace.lints.rust]
mismatched_lifetime_syntaxes = "allow"

[profile.optimize]
inherits = "release"
strip = true         # Automatically strip symbols from the binary.
lto = true           # Link-time optimization.
opt-level = 3        # Optimization level 3.
codegen-units = 1    # Maximum size reduction optimizations.

[profile.size]
inherits = "optimize"
opt-level = "s"       # Optimize for size.

[profile.release-dev]
inherits = "release"
lto = false
debug = true
debug-assertions = true
overflow-checks = true
incremental = true
codegen-units = 256

[workspace.dependencies]
ansi_colours = "1.2.3"
anstyle = "1.0.13"
anyhow = "1.0.100"
bstr = "1.12.0"
cc = "1.2.48"
clap = { version = "4.5.53", features = [
  "cargo",
  "derive",
  "env",
  "help",
  "string",
  "unstable-styles",
] }
clap_complete = "4.5.61"
clap_complete_nushell = "4.5.10"
crc32fast = "1.5.0"
ctor = "0.2.9"
ctrlc = { version = "3.5.0", features = ["termination"] }
dialoguer = { version = "0.11.0", features = ["fuzzy-select"] }
etcetera = "0.11.0"
fs4 = "0.12.0"
glob = "0.3.3"
heck = "0.5.0"
html-escape = "0.2.13"
indexmap = "2.12.1"
indoc = "2.0.6"
libloading = "0.9.0"
log = { version = "0.4.28", features = ["std"] }
memchr = "2.7.6"
once_cell = "1.21.3"
pretty_assertions = "1.4.1"
rand = "0.8.5"
regex = "1.11.3"
regex-syntax = "0.8.6"
rustc-hash = "2.1.1"
schemars = "1.0.5"
semver = { version = "1.0.27", features = ["serde"] }
serde = { version = "1.0.219", features = ["derive"] }
serde_json = { version = "1.0.145", features = ["preserve_order"] }
similar = "2.7.0"
smallbitvec = "2.6.0"
streaming-iterator = "0.1.9"
tempfile = "3.23.0"
thiserror = "2.0.17"
tiny_http = "0.12.0"
topological-sort = "0.2.2"
unindent = "0.2.4"
walkdir = "2.5.0"
wasmparser = "0.243.0"
webbrowser = "1.0.5"

tree-sitter = { version = "0.26.8", path = "./lib" }
tree-sitter-generate = { version = "0.26.8", path = "./crates/generate", default-features = false }
tree-sitter-loader = { version = "0.26.8", path = "./crates/loader" }
tree-sitter-config = { version = "0.26.8", path = "./crates/config" }
tree-sitter-highlight = { version = "0.26.8", path = "./crates/highlight" }
tree-sitter-tags = { version = "0.26.8", path = "./crates/tags" }

tree-sitter-language = { version = "0.1", path = "./crates/language" }
