#!/usr/bin/env bash # Try to make sure we are in the zed repo rootif [ ! -d "crates" ] || [ ! -d "script" ]; then echo "Error: Run from the \`zed\` repo root" exit 1fi if [ ! -f "Cargo.toml" ]; then echo "Error: Run from the \`zed\` repo root" exit 1fi if [ $# -eq 0 ]; then echo "Usage: $0 <crate_name> [optional_license_flag]" exit 1fi CRATE_NAME="$1" LICENSE_FLAG=$(echo "${2}" | tr '[:upper:]' '[:lower:]')if [[ "$LICENSE_FLAG" == *"apache"* ]]; then LICENSE_MODE="Apache-2.0" LICENSE_FILE="LICENSE-APACHE"elif [[ "$LICENSE_FLAG" == *"agpl"* ]]; then LICENSE_MODE="AGPL-3.0-or-later" LICENSE_FILE="LICENSE-AGPL"else LICENSE_MODE="GPL-3.0-or-later" LICENSE_FILE="LICENSE-GPL"fi if [[ ! "$CRATE_NAME" =~ ^[a-z0-9_]+$ ]]; then echo "Error: Crate name must be lowercase and contain only alphanumeric characters and underscores" exit 1fi CRATE_PATH="crates/$CRATE_NAME"mkdir -p "$CRATE_PATH/src" # Symlink the licenseln -sf "../../$LICENSE_FILE" "$CRATE_PATH/$LICENSE_FILE" CARGO_TOML_TEMPLATE=$(cat << 'EOF'[package]name = "$CRATE_NAME"version = "0.1.0"edition.workspace = truepublish.workspace = truelicense = "$LICENSE_MODE" [lints]workspace = true [lib]path = "src/$CRATE_NAME.rs" [features]default = [] [dependencies]anyhow.workspace = truegpui.workspace = trueui.workspace = trueutil.workspace = true # Uncomment other workspace dependencies as needed# assistant.workspace = true# client.workspace = true# project.workspace = true# settings.workspace = trueEOF) # Populate templateCARGO_TOML_CONTENT=$(echo "$CARGO_TOML_TEMPLATE" | sed \ -e "s/\$CRATE_NAME/$CRATE_NAME/g" \ -e "s/\$LICENSE_MODE/$LICENSE_MODE/g") echo "$CARGO_TOML_CONTENT" > "$CRATE_PATH/Cargo.toml" echo "//! # $CRATE_NAME" > "$CRATE_PATH/src/$CRATE_NAME.rs" echo "Created new crate: $CRATE_NAME in $CRATE_PATH"echo "License: $LICENSE_MODE (symlinked from $LICENSE_FILE)"echo "Don't forget to add the new crate to the workspace!"
#!/usr/bin/env bash
# Try to make sure we are in the zed repo root
if [ ! -d "crates" ] || [ ! -d "script" ]; then
echo "Error: Run from the \`zed\` repo root"
exit 1
fi
if [ ! -f "Cargo.toml" ]; then
echo "Error: Run from the \`zed\` repo root"
exit 1
fi
if [ $# -eq 0 ]; then
echo "Usage: $0 <crate_name> [optional_license_flag]"
exit 1
fi
CRATE_NAME="$1"
LICENSE_FLAG=$(echo "${2}" | tr '[:upper:]' '[:lower:]')
if [[ "$LICENSE_FLAG" == *"apache"* ]]; then
LICENSE_MODE="Apache-2.0"
LICENSE_FILE="LICENSE-APACHE"
elif [[ "$LICENSE_FLAG" == *"agpl"* ]]; then
LICENSE_MODE="AGPL-3.0-or-later"
LICENSE_FILE="LICENSE-AGPL"
else
LICENSE_MODE="GPL-3.0-or-later"
LICENSE_FILE="LICENSE-GPL"
fi
if [[ ! "$CRATE_NAME" =~ ^[a-z0-9_]+$ ]]; then
echo "Error: Crate name must be lowercase and contain only alphanumeric characters and underscores"
exit 1
fi
CRATE_PATH="crates/$CRATE_NAME"
mkdir -p "$CRATE_PATH/src"
# Symlink the license
ln -sf "../../$LICENSE_FILE" "$CRATE_PATH/$LICENSE_FILE"
CARGO_TOML_TEMPLATE=$(cat << 'EOF'
[package]
name = "$CRATE_NAME"
version = "0.1.0"
edition.workspace = true
publish.workspace = true
license = "$LICENSE_MODE"
[lints]
workspace = true
[lib]
path = "src/$CRATE_NAME.rs"
[features]
default = []
[dependencies]
anyhow.workspace = true
gpui.workspace = true
ui.workspace = true
util.workspace = true
# Uncomment other workspace dependencies as needed
# assistant.workspace = true
# client.workspace = true
# project.workspace = true
# settings.workspace = true
EOF
)
# Populate template
CARGO_TOML_CONTENT=$(echo "$CARGO_TOML_TEMPLATE" | sed \
-e "s/\$CRATE_NAME/$CRATE_NAME/g" \
-e "s/\$LICENSE_MODE/$LICENSE_MODE/g")
echo "$CARGO_TOML_CONTENT" > "$CRATE_PATH/Cargo.toml"
echo "//! # $CRATE_NAME" > "$CRATE_PATH/src/$CRATE_NAME.rs"
echo "Created new crate: $CRATE_NAME in $CRATE_PATH"
echo "License: $LICENSE_MODE (symlinked from $LICENSE_FILE)"
echo "Don't forget to add the new crate to the workspace!"