Skip to content

washanhanzi/cargo-appraiser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

cargo-appraiser

lsp release vscode extension release

Architecture | Contributing

What's this

cargo-appraiser is an LSP server for your Cargo.toml files. It helps you understand the relationship between your declared dependencies (the desired state in Cargo.toml) and what cargo has actually resolved and put into your Cargo.lock file (the actual state). This insight allows you to quickly see if your dependencies are up-to-date, identify potential version conflicts, and navigate complex workspaces with greater clarity.

Features

  • Workspace
    • hover on members will show the list of members
    • go to definition on single non-glob member
  • Dependencies
    • version decorations CleanShot 2025-01-14 at 11 55 18@2x
    • hover on version will show the available versions CleanShot 2025-01-14 at 11 56 04@2x
    • hover on git dependency will show the git reference and commit CleanShot 2025-01-14 at 11 56 55@2x
    • hover on features will show available features, hover on a feature name will show its values CleanShot 2025-01-14 at 11 57 37@2x CleanShot 2025-01-14 at 11 58 26@2x
    • code action on dependency's version CleanShot 2025-01-14 at 12 00 57@2x
    • cargo update code action on dependency's version and workspace
    • goto definition on workspace dependency
  • Audit
    • Show warning and vulnerability information on dependencies. CleanShot 2025-09-13 at 23 40 54@2x
    • This feature is enabled by default. To disable it, check the audit.disabled config.
    • Requires the cargo audit command. Install it by running: cargo install cargo-audit --locked.
    • For more details, see cargo-audit.

Config

VSCode specific config

{
  // the default for light and highContrastLight
  "cargo-appraiser.decorationColor.light": {
      "notParsed": "#808080",
      "latest": "#006400",
      "local": "#00008B",
      "notInstalled": "#808080",
      "mixedUpgradeable": "#B8860B",
      "compatibleLatest": "#B8860B",
      "nonCompatibleLatest": "#B8860B",
      "yanked": "#FF0000",
      "git": "#800080"
  },
  // the default for dark and highContrast
  "cargo-appraiser.decorationColor.dark": {
      "notParsed": "#808080",
      "latest": "#006400",
      "local": "#00008B",
      "notInstalled": "#808080",
      "mixedUpgradeable": "#FF8C00",
      "compatibleLatest": "#FF8C00",
      "nonCompatibleLatest": "#FF8C00",
      "yanked": "#FF0000",
      "git": "#800080"
  },
  "cargo-appraiser.decorationColor.highContrastLight": {
      //same as light
  },
  "cargo-appraiser.decorationColor.highContrast": {
      //same as dark
  },
  // extra environment variables to pass to the cargo-appraiser server
  "cargo-appraiser.extraEnv": {
    "RUST_LOG": "info"
  },
  // custom path to the cargo-appraiser server binary. If set, this will be used instead of downloading from GitHub.
  "cargo-appraiser.serverPath": "",
  // specific version of cargo-appraiser server to use. Ignored if serverPath is set.
  "cargo-appraiser.serverVersion": ""
}

lsp initialization options

To apply these config, you need to restart the lsp.

Examples

  • VSCode
{
  "cargo-appraiser.decorationFormatter": {}, //see below
  "cargo-appraiser.audit": {}, //see below
  "cargo-appraiser.cratesIo": {} //see below
}
  • Zed
{
    "lsp": {
        "cargo-appraiser": {
            "initialization_options": {
                "decorationFormatter": {}, //see below
                "audit": {}, //see below
                "cratesIo": {} //see below
            },
            //you need to set both path and arguments if you want to use a custom binary. https://github.com/zed-industries/zed/issues/22775
             "binary": {
               //path take precedence over settings.version
               "path": "/path/to/cargo-appraiser",
               "arguments": ["--renderer", "inlayHint"]
            },
            "settings":{
              //specify the version of cargo-appraiser server to use
              "version": "=0.3.0"
            }
        }
    }
}

Default values

{
  /// the formatter has 7 fields:
  /// latest: the dependency has the latest version installed
  /// local: the dependency is a local path dependency
  /// not_resolved: the dependency is not resolved (platform mismatch or not used by any member)
  /// loading: the dependency is loading
  /// mixed_upgradeable: the installed version has an compatible upgrade, but the latest version is not compatible with the current version requirement
  /// compatible_latest: the installed version can update to latest version
  /// noncompatible_latest: the installed version can't upate to latest version and there is no compatible upgrade
  /// yanked: the installed version is yanked
  /// git: the dependency is a git dependency, support {{ref}}, {{commit}} template strings
  ///
  /// a dependency is in `waiting` state for 2 possible reasons:
  /// 1. wait for `cargo` to run. `Cargo.toml` is not saved, so `cargo` haven't picked up the change.
  /// 2. wait for `cargo` to finish. `cargo` is running in process to resolve the dependency.
  ///
  /// each field's value may has 3 template strings:
  /// - installed: the installed version
  /// - latest_matched: the latest compatible version
  /// - latest: the latest version, the latest version may or may not be compatilbe with the version requirement
  ///
  /// the default formatter is:
  "decorationFormatter": {
    "latest": "βœ… {{installed}}",
    "local": "Local",
    "not_resolved": "Not Resolved",
    "waiting": "Waiting...",
    "mixed_upgradeable": "πŸš€πŸ”’ {{installed}} -> {{latest_matched}},  {{latest}}",
    "compatible_latest": "πŸš€ {{installed}} -> {{latest}}",
    "noncompatible_latest": "πŸ”’ {{installed}}, {{latest}}",
    "yanked": "❌ yanked {{installed}}, {{latest_matched}}",
    "git": "πŸ™ {{commit}}"
  },
  "audit":{
    "disabled": false,
    // "warning" will show warning and vulnerability
    // "vulnerability" will only show vulnerability
    "level": "warning"
  },
  // crates.io URL configuration
  // - not provided: use default URL
  // - empty string "": disable the feature
  // - non-empty string: use custom URL (trailing slash will be removed)
  "cratesIo": {
    "sparseIndexUrl": "https://index.crates.io",
    "apiUrl": "https://crates.io/api/v1/crates"
  }
}

Supported Editors

VSCode is the main supported editor.

Enable inlay_hints in settings.

"inlay_hints": {
 "enabled": true
}

Vim has minimal support for now.

Troubleshooting

macOS Gatekeeper

If you manually downloaded the LSP binary (e.g., from GitHub releases via a browser), macOS Gatekeeper may block it, causing a SIGKILL error.

To fix this, remove the quarantine attribute from the binary:

xattr -d com.apple.quarantine <path-to-binary>

Default LSP Binary Paths

VS Code:

~/Library/Application Support/Code/User/globalStorage/washan.cargo-appraiser/cargo-appraiser-v<version>/cargo-appraiser

Zed:

~/Library/Application Support/Zed/extensions/work/cargo-appraiser/cargo-appraiser-<version>/cargo-appraiser

Thanks to

About

Quality of Life improvement for Cargo.toml

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors 4

  •  
  •  
  •  
  •