147 lines
3.2 KiB
Bash
Executable File
147 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env sh
|
||
|
||
set -eu
|
||
|
||
PROJECT_ROOT="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
|
||
|
||
info() {
|
||
printf '%s\n' "[INFO] $*"
|
||
}
|
||
|
||
warn() {
|
||
printf '%s\n' "[WARN] $*" >&2
|
||
}
|
||
|
||
error() {
|
||
printf '%s\n' "[ERROR] $*" >&2
|
||
}
|
||
|
||
section() {
|
||
printf '\n%s\n' "== $* =="
|
||
}
|
||
|
||
has_cmd() {
|
||
command -v "$1" >/dev/null 2>&1
|
||
}
|
||
|
||
print_install_help() {
|
||
cat <<'EOF'
|
||
|
||
未检测到 marksman。
|
||
|
||
建议安装方式:
|
||
|
||
macOS(Homebrew):
|
||
brew install marksman
|
||
|
||
Rust(Cargo):
|
||
cargo install marksman
|
||
|
||
安装完成后可执行:
|
||
marksman --help
|
||
|
||
如果 macOS 提示二进制文件无法打开,可尝试:
|
||
xattr -d com.apple.quarantine "$(command -v marksman)"
|
||
|
||
EOF
|
||
}
|
||
|
||
check_binary() {
|
||
section "检查 marksman 可执行文件"
|
||
|
||
if ! has_cmd marksman; then
|
||
error "当前环境未找到 marksman"
|
||
print_install_help
|
||
return 1
|
||
fi
|
||
|
||
MARKSMAN_BIN="$(command -v marksman)"
|
||
info "已找到 marksman: $MARKSMAN_BIN"
|
||
|
||
if marksman --help >/dev/null 2>&1; then
|
||
info "marksman 可正常执行"
|
||
else
|
||
warn "marksman 已存在,但执行 --help 失败"
|
||
return 1
|
||
fi
|
||
|
||
if marksman --version >/dev/null 2>&1; then
|
||
VERSION="$(marksman --version 2>/dev/null | head -n 1 || true)"
|
||
[ -n "${VERSION:-}" ] && info "版本信息: $VERSION"
|
||
else
|
||
warn "marksman 不支持 --version 或版本信息获取失败"
|
||
fi
|
||
|
||
return 0
|
||
}
|
||
|
||
check_project_config() {
|
||
section "检查项目配置"
|
||
|
||
if [ -f "$PROJECT_ROOT/.marksman.toml" ]; then
|
||
info "已检测到工作区配置: $PROJECT_ROOT/.marksman.toml"
|
||
else
|
||
warn "未检测到 .marksman.toml,跨文档引用/工作区能力可能不稳定"
|
||
fi
|
||
|
||
if [ -f "$PROJECT_ROOT/.zed/settings.json" ]; then
|
||
info "已检测到 Zed 项目设置: $PROJECT_ROOT/.zed/settings.json"
|
||
if grep -q '"Markdown"' "$PROJECT_ROOT/.zed/settings.json" 2>/dev/null \
|
||
&& grep -q '"marksman"' "$PROJECT_ROOT/.zed/settings.json" 2>/dev/null; then
|
||
info "Zed 已配置 Markdown 使用 marksman"
|
||
else
|
||
warn "Zed 设置文件存在,但未明显检测到 Markdown + marksman 配置"
|
||
fi
|
||
else
|
||
warn "未检测到 Zed 项目设置文件: .zed/settings.json"
|
||
fi
|
||
|
||
if [ -f "$PROJECT_ROOT/.claude/settings.json" ]; then
|
||
info "已检测到 Claude Code 项目设置: $PROJECT_ROOT/.claude/settings.json"
|
||
if grep -q 'marksman' "$PROJECT_ROOT/.claude/settings.json" 2>/dev/null; then
|
||
info "Claude Code 设置中已包含 marksman 相关权限或调用配置"
|
||
else
|
||
warn "Claude Code 设置文件存在,但未明显检测到 marksman 相关配置"
|
||
fi
|
||
else
|
||
warn "未检测到 Claude Code 项目设置文件: .claude/settings.json"
|
||
fi
|
||
}
|
||
|
||
print_usage_help() {
|
||
cat <<EOF
|
||
|
||
建议使用方式:
|
||
|
||
1. 在编辑器中使用
|
||
- Zed 中为 Markdown 启用 marksman 后,可获得跳转、补全、引用检查等能力
|
||
|
||
2. 在命令行中验证
|
||
- 查看帮助:
|
||
marksman --help
|
||
- 作为 LSP 服务运行:
|
||
marksman server
|
||
|
||
3. 工作区建议
|
||
- 保持仓库根目录存在 .marksman.toml
|
||
- Markdown 文档尽量使用稳定的相对链接与标题锚点
|
||
|
||
项目根目录:
|
||
$PROJECT_ROOT
|
||
|
||
EOF
|
||
}
|
||
|
||
main() {
|
||
section "Marksman 环境检查"
|
||
info "项目根目录: $PROJECT_ROOT"
|
||
|
||
check_binary
|
||
check_project_config
|
||
print_usage_help
|
||
|
||
printf '\n%s\n' "检查完成。"
|
||
}
|
||
|
||
main "$@"
|