Skip to content

Commit

Permalink
Relax restriction that library be in its own workspace
Browse files Browse the repository at this point in the history
  • Loading branch information
smoelius committed Jun 13, 2022
1 parent ff4a069 commit 167ce9e
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 24 deletions.
16 changes: 1 addition & 15 deletions dylint/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,21 +272,7 @@ fn package_id(source_id: SourceId, package_root: &Path) -> Result<PackageId> {
.no_deps()
.exec()?;

ensure!(
metadata.packages.len() <= 1,
"Library is not in its own workspace: {}",
package_root.to_string_lossy()
);

let package = metadata
.packages
.first()
.ok_or_else(|| anyhow!("Found no packages in `{}`", package_root.to_string_lossy()))?;

assert_eq!(
metadata.workspace_root,
package.manifest_path.parent().unwrap()
);
let package = dylint_internal::cargo::package_with_root(&metadata, package_root)?;

PackageId::new(&package.name, &package.version.to_string(), source_id)
}
Expand Down
34 changes: 28 additions & 6 deletions internal/src/cargo.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use ansi_term::Style;
use anyhow::{anyhow, ensure, Result};
use cargo_metadata::{Metadata, MetadataCommand, Package, PackageId};
use std::{io::Write, process::Stdio};
use std::{io::Write, path::Path, process::Stdio};

#[must_use]
pub fn build(description: &str, quiet: bool) -> crate::Command {
Expand Down Expand Up @@ -56,13 +56,35 @@ pub fn current_metadata() -> Result<Metadata> {
MetadataCommand::new().no_deps().exec().map_err(Into::into)
}

pub fn root_package(metadata: &Metadata) -> Result<Package> {
ensure!(metadata.packages.len() <= 1, "Found multiple packages");
metadata
pub fn package_with_root(metadata: &Metadata, package_root: &Path) -> Result<Package> {
let packages = metadata
.packages
.first()
.iter()
.map(|package| {
let path = package
.manifest_path
.parent()
.ok_or_else(|| anyhow!("Could not get parent directory"))?;
Ok(if path == package_root {
Some(package)
} else {
None
})
})
.filter_map(Result::transpose)
.collect::<Result<Vec<_>>>()?;

ensure!(
packages.len() <= 1,
"Found multiple packages in `{}`",
package_root.to_string_lossy()
);

packages
.into_iter()
.next()
.cloned()
.ok_or_else(|| anyhow!("Found no packages"))
.ok_or_else(|| anyhow!("Found no packages in `{}`", package_root.to_string_lossy()))
}

pub fn package(metadata: &Metadata, package_id: &PackageId) -> Result<Package> {
Expand Down
13 changes: 10 additions & 3 deletions utils/testing/src/ui.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
use crate::{example_target, example_targets, initialize, run_example_test, run_tests};
use std::path::{Path, PathBuf};
use std::{
env::current_dir,
path::{Path, PathBuf},
};

enum Target {
SrcBase(PathBuf),
Expand Down Expand Up @@ -59,7 +62,9 @@ impl Test {
}
Target::Example(example) => {
let metadata = dylint_internal::cargo::current_metadata().unwrap();
let package = dylint_internal::cargo::root_package(&metadata).unwrap();
let current_dir = current_dir().unwrap();
let package =
dylint_internal::cargo::package_with_root(&metadata, &current_dir).unwrap();
let target = example_target(&package, example).unwrap();

run_example_test(
Expand All @@ -73,7 +78,9 @@ impl Test {
}
Target::Examples => {
let metadata = dylint_internal::cargo::current_metadata().unwrap();
let package = dylint_internal::cargo::root_package(&metadata).unwrap();
let current_dir = current_dir().unwrap();
let package =
dylint_internal::cargo::package_with_root(&metadata, &current_dir).unwrap();
let targets = example_targets(&package).unwrap();

for target in targets {
Expand Down

0 comments on commit 167ce9e

Please sign in to comment.