about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJason Newcomb <jsnewcomb@pm.me>2022-03-29 08:32:12 -0400
committerJason Newcomb <jsnewcomb@pm.me>2022-04-01 23:18:47 -0400
commit7025283f3ec649f0041c81a7e8269d38e0fc21ba (patch)
tree6ec5076a608c99431a2b5fd1b465e9339f287c57
parentb3f8415032a4b86f72aa7a99c7fe62a25c302927 (diff)
downloadrust-7025283f3ec649f0041c81a7e8269d38e0fc21ba.tar.gz
rust-7025283f3ec649f0041c81a7e8269d38e0fc21ba.zip
Remove cargo_metadata dependency from clippy_dev
-rw-r--r--clippy_dev/Cargo.toml3
-rw-r--r--clippy_dev/src/lib.rs1
-rw-r--r--clippy_dev/src/new_lint.rs24
3 files changed, 17 insertions, 11 deletions
diff --git a/clippy_dev/Cargo.toml b/clippy_dev/Cargo.toml
index 80423ea624f..1f2d8adecee 100644
--- a/clippy_dev/Cargo.toml
+++ b/clippy_dev/Cargo.toml
@@ -4,15 +4,12 @@ version = "0.0.1"
 edition = "2021"
 
 [dependencies]
-bytecount = "0.6"
 clap = "2.33"
 indoc = "1.0"
 itertools = "0.10.1"
 opener = "0.5"
 shell-escape = "0.1"
 walkdir = "2.3"
-cargo_metadata = "0.14"
-
 
 [features]
 deny-warnings = []
diff --git a/clippy_dev/src/lib.rs b/clippy_dev/src/lib.rs
index f9e0f2ff69c..414b403827d 100644
--- a/clippy_dev/src/lib.rs
+++ b/clippy_dev/src/lib.rs
@@ -1,3 +1,4 @@
+#![feature(let_else)]
 #![feature(once_cell)]
 #![feature(rustc_private)]
 #![cfg_attr(feature = "deny-warnings", deny(warnings))]
diff --git a/clippy_dev/src/new_lint.rs b/clippy_dev/src/new_lint.rs
index 59658b42c79..7a3fd131761 100644
--- a/clippy_dev/src/new_lint.rs
+++ b/clippy_dev/src/new_lint.rs
@@ -133,15 +133,23 @@ fn to_camel_case(name: &str) -> String {
 }
 
 fn get_stabilisation_version() -> String {
-    let mut command = cargo_metadata::MetadataCommand::new();
-    command.no_deps();
-    if let Ok(metadata) = command.exec() {
-        if let Some(pkg) = metadata.packages.iter().find(|pkg| pkg.name == "clippy") {
-            return format!("{}.{}.0", pkg.version.minor, pkg.version.patch);
-        }
+    fn parse_manifest(contents: &str) -> Option<String> {
+        let version = contents
+            .lines()
+            .filter_map(|l| l.split_once('='))
+            .find_map(|(k, v)| (k.trim() == "version").then(|| v.trim()))?;
+        let Some(("0", version)) = version.get(1..version.len() - 1)?.split_once('.') else {
+            return None;
+        };
+        let (minor, patch) = version.split_once('.')?;
+        Some(format!(
+            "{}.{}.0",
+            minor.parse::<u32>().ok()?,
+            patch.parse::<u32>().ok()?
+        ))
     }
-
-    String::from("<TODO set version(see doc/adding_lints.md)>")
+    let contents = fs::read_to_string("Cargo.toml").expect("Unable to read `Cargo.toml`");
+    parse_manifest(&contents).expect("Unable to find package version in `Cargo.toml`")
 }
 
 fn get_test_file_contents(lint_name: &str, header_commands: Option<&str>) -> String {