Skip to content

Commit

Permalink
remove package kind
Browse files Browse the repository at this point in the history
  • Loading branch information
macovedj committed Jul 11, 2024
1 parent 19301eb commit 5d98d8c
Show file tree
Hide file tree
Showing 67 changed files with 19 additions and 158 deletions.
2 changes: 1 addition & 1 deletion crates/wit-component/src/encoding/wit/v2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ impl Encoder<'_> {
let mut names = NameMap::new();
for pkg in self.packages {
let package = &self.resolve.packages[*pkg];
if let PackageKind::Explicit = package.kind {
if self.packages.len() > 1 {
let mut sub_encoder = Encoder {
component: ComponentBuilder::default(),
resolve: self.resolve,
Expand Down
3 changes: 1 addition & 2 deletions crates/wit-component/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ use wasm_encoder::{
};
use wasm_metadata::Producers;
use wasmparser::{BinaryReader, Encoding, Parser, Payload, WasmFeatures};
use wit_parser::{Package, PackageKind, PackageName, Resolve, World, WorldId, WorldItem};
use wit_parser::{Package, PackageName, Resolve, World, WorldId, WorldItem};

const CURRENT_VERSION: u8 = 0x04;
const CUSTOM_SECTION_NAME: &str = "wit-component-encoding";
Expand Down Expand Up @@ -80,7 +80,6 @@ impl Default for Bindgen {
name: "root".to_string(),
version: None,
},
kind: PackageKind::Implicit,
docs: Default::default(),
interfaces: Default::default(),
worlds: Default::default(),
Expand Down
7 changes: 1 addition & 6 deletions crates/wit-parser/src/ast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1592,11 +1592,6 @@ enum ResolverKind<'a> {
PartialImplicit(Resolver<'a>),
}

pub(crate) enum ResolverKindTag {
Explicit,
Implicit,
}

fn parse_package(
unparsed_pkgs: Vec<ExplicitPackage>,
src: &Source,
Expand Down Expand Up @@ -1729,7 +1724,7 @@ impl SourceMap {
match resolver_kind {
ResolverKind::Unknown => bail!("No WIT packages found in the supplied source"),
ResolverKind::Explicit(pkgs) => Ok(pkgs),
ResolverKind::PartialImplicit(mut resolver) => match resolver.resolve(ResolverKindTag::Implicit)? {
ResolverKind::PartialImplicit(mut resolver) => match resolver.resolve()? {
Some(pkg) => Ok(vec![pkg]),
None => bail!("No WIT packages found in the supplied source"),
},
Expand Down
39 changes: 15 additions & 24 deletions crates/wit-parser/src/ast/resolve.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use super::{ParamList, ResolverKindTag, ResultList, WorldOrInterface};
use super::{ParamList, ResultList, WorldOrInterface};
use crate::ast::toposort::toposort;
use crate::*;
use anyhow::bail;
Expand All @@ -14,7 +14,7 @@ pub struct Resolver<'a> {
package_docs: Docs,

/// All non-`package` WIT decls are going to be resolved together.
decl_lists: Vec<(PackageKind, ast::DeclList<'a>)>,
decl_lists: Vec<ast::DeclList<'a>>,

// Arenas that get plumbed to the final `UnresolvedPackage`
types: Arena<TypeDef>,
Expand Down Expand Up @@ -140,12 +140,11 @@ impl<'a> Resolver<'a> {
self.package_docs = docs;
}
}
self.decl_lists
.push((PackageKind::Implicit, partial.decl_list));
self.decl_lists.push(partial.decl_list);
Ok(())
}

pub(crate) fn resolve(&mut self, kind: ResolverKindTag) -> Result<Option<UnresolvedPackage>> {
pub(crate) fn resolve(&mut self) -> Result<Option<UnresolvedPackage>> {
// At least one of the WIT files must have a `package` annotation.
let name = match &self.package_name {
Some(name) => name.clone(),
Expand All @@ -172,7 +171,7 @@ impl<'a> Resolver<'a> {
let mut iface_id_to_ast = IndexMap::new();
let mut world_id_to_ast = IndexMap::new();
for (i, decl_list) in decl_lists.iter().enumerate() {
for item in decl_list.1.items.iter() {
for item in decl_list.items.iter() {
match item {
ast::AstItem::Interface(iface) => {
let id = match self.ast_items[i][iface.name.name] {
Expand Down Expand Up @@ -207,10 +206,6 @@ impl<'a> Resolver<'a> {

Ok(Some(UnresolvedPackage {
name,
kind: match kind {
ResolverKindTag::Explicit => PackageKind::Explicit,
ResolverKindTag::Implicit => PackageKind::Implicit,
},
docs: mem::take(&mut self.package_docs),
worlds: mem::take(&mut self.worlds),
types: mem::take(&mut self.types),
Expand Down Expand Up @@ -242,21 +237,20 @@ impl<'a> Resolver<'a> {
) -> Result<Option<UnresolvedPackage>> {
self.package_name = Some(package.package_id.package_name());
self.docs(&package.package_id.docs);
self.decl_lists = vec![(PackageKind::Explicit, package.decl_list)];
self.resolve(ResolverKindTag::Explicit)
self.decl_lists = vec![package.decl_list];
self.resolve()
}

/// Registers all foreign dependencies made within the ASTs provided.
///
/// This will populate the `self.foreign_{deps,interfaces,worlds}` maps with all
/// `UsePath::Package` entries.
fn populate_foreign_deps(&mut self, decl_lists: &[(PackageKind, ast::DeclList<'a>)]) {
fn populate_foreign_deps(&mut self, decl_lists: &[ast::DeclList<'a>]) {
let mut foreign_deps = mem::take(&mut self.foreign_deps);
let mut foreign_interfaces = mem::take(&mut self.foreign_interfaces);
let mut foreign_worlds = mem::take(&mut self.foreign_worlds);
for decl_list in decl_lists {
decl_list
.1
.for_each_path(|_, path, _names, world_or_iface| {
let (id, name) = match path {
ast::UsePath::Package { id, name } => (id, name),
Expand Down Expand Up @@ -344,7 +338,7 @@ impl<'a> Resolver<'a> {
/// generated for resolving use-paths later on.
fn populate_ast_items(
&mut self,
decl_lists: &[(PackageKind, ast::DeclList<'a>)],
decl_lists: &[ast::DeclList<'a>],
) -> Result<(Vec<InterfaceId>, Vec<WorldId>)> {
let mut package_items = IndexMap::new();

Expand All @@ -355,7 +349,7 @@ impl<'a> Resolver<'a> {
let mut order = IndexMap::new();
for decl_list in decl_lists {
let mut decl_list_ns = IndexMap::new();
for item in decl_list.1.items.iter() {
for item in decl_list.items.iter() {
match item {
ast::AstItem::Interface(i) => {
if package_items.insert(i.name.name, i.name.span).is_some() {
Expand Down Expand Up @@ -407,7 +401,7 @@ impl<'a> Resolver<'a> {
// package or foreign items. Foreign deps are ignored for
// topological ordering.
let mut decl_list_ns = IndexMap::new();
for item in decl_list.1.items.iter() {
for item in decl_list.items.iter() {
let (name, src) = match item {
ast::AstItem::Use(u) => {
let name = u.as_.as_ref().unwrap_or(u.item.name());
Expand All @@ -430,7 +424,7 @@ impl<'a> Resolver<'a> {

// With this file's namespace information look at all `use` paths
// and record dependencies between interfaces.
decl_list.1.for_each_path(|iface, path, _names, _| {
decl_list.for_each_path(|iface, path, _names, _| {
// If this import isn't contained within an interface then it's
// in a world and it doesn't need to participate in our
// topo-sort.
Expand Down Expand Up @@ -496,7 +490,7 @@ impl<'a> Resolver<'a> {
}
for decl_list in decl_lists {
let mut items = IndexMap::new();
for item in decl_list.1.items.iter() {
for item in decl_list.items.iter() {
let (name, ast_item) = match item {
ast::AstItem::Use(u) => {
if !u.attributes.is_empty() {
Expand Down Expand Up @@ -554,13 +548,10 @@ impl<'a> Resolver<'a> {
/// This is done after all interfaces are generated so `self.resolve_path`
/// can be used to determine if what's being imported from is a foreign
/// interface or not.
fn populate_foreign_types(
&mut self,
decl_lists: &[(PackageKind, ast::DeclList<'a>)],
) -> Result<()> {
fn populate_foreign_types(&mut self, decl_lists: &[ast::DeclList<'a>]) -> Result<()> {
for (i, decl_list) in decl_lists.iter().enumerate() {
self.cur_ast_index = i;
decl_list.1.for_each_path(|_, path, names, _| {
decl_list.for_each_path(|_, path, names, _| {
let names = match names {
Some(names) => names,
None => return Ok(()),
Expand Down
12 changes: 0 additions & 12 deletions crates/wit-parser/src/decoding.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
use crate::resolve::PackageKind;
use crate::*;
use anyhow::{anyhow, bail};
use indexmap::IndexSet;
Expand Down Expand Up @@ -413,7 +412,6 @@ impl ComponentInfo {
let mut resolve = if let Some(name) = pkg_name {
let pkg = Package {
name,
kind: PackageKind::Implicit,
docs: Docs::default(),
interfaces: fields.interfaces.clone(),
worlds: fields.worlds.clone(),
Expand Down Expand Up @@ -484,7 +482,6 @@ impl ComponentInfo {
pkg_names.push(name.clone());
let pkg = Package {
name: name.clone(),
kind: PackageKind::Implicit,
docs: Docs::default(),
interfaces: fields.interfaces.clone(),
worlds: fields.worlds.clone(),
Expand All @@ -495,7 +492,6 @@ impl ComponentInfo {
} else {
let pkg = Package {
name: name.clone(),
kind: PackageKind::Implicit,
docs: Docs::default(),
interfaces: fields.interfaces.clone(),
worlds: fields.worlds.clone(),
Expand All @@ -508,15 +504,13 @@ impl ComponentInfo {
let pkg = if let Some(name) = pkg_name {
Package {
name: name.clone(),
kind: PackageKind::Implicit,
docs: Docs::default(),
interfaces: fields.interfaces.clone(),
worlds: fields.worlds.clone(),
}
} else {
Package {
name: explicit.name.as_ref().unwrap().clone(),
kind: PackageKind::Implicit,
docs: Docs::default(),
interfaces: fields.interfaces.clone(),
worlds: fields.worlds.clone(),
Expand Down Expand Up @@ -582,7 +576,6 @@ impl ComponentInfo {
version: None,
name: "component".to_string(),
},
kind: PackageKind::Implicit,
docs: Default::default(),
worlds: [(world_name.to_string(), world)].into_iter().collect(),
interfaces: Default::default(),
Expand Down Expand Up @@ -747,7 +740,6 @@ pub fn decode_world(wasm: &[u8]) -> Result<(Resolve, WorldId)> {
let name = decoder.decode_world(name, &types[ty], &mut fields)?;
let (resolve, pkg) = decoder.finish(Package {
name,
kind: PackageKind::Implicit,
interfaces: fields.interfaces.clone(),
worlds: fields.worlds.clone(),
docs: Default::default(),
Expand Down Expand Up @@ -822,7 +814,6 @@ impl WitPackageDecoder<'_> {
}
_ => bail!("package name is not a valid id: {name}"),
},
kind: PackageKind::Implicit,
docs: Default::default(),
interfaces: Default::default(),
worlds: Default::default(),
Expand Down Expand Up @@ -1151,7 +1142,6 @@ impl WitPackageDecoder<'_> {
.entry(package_name.to_string())
.or_insert_with(|| Package {
name: package_name.clone(),
kind: PackageKind::Implicit,
docs: Default::default(),
interfaces: Default::default(),
worlds: Default::default(),
Expand Down Expand Up @@ -1738,7 +1728,6 @@ impl WitPackageDecoder<'_> {
fn insert_package(&mut self, package: Package) -> PackageId {
let Package {
name,
kind,
interfaces,
worlds,
docs,
Expand All @@ -1757,7 +1746,6 @@ impl WitPackageDecoder<'_> {
.unwrap_or_else(|| {
let id = self.resolve.packages.alloc(Package {
name: name.clone(),
kind: kind.clone(),
interfaces: Default::default(),
worlds: Default::default(),
docs,
Expand Down
5 changes: 1 addition & 4 deletions crates/wit-parser/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ pub use ast::{parse_use_path, ParsedUsePath};
mod sizealign;
pub use sizealign::*;
mod resolve;
pub use resolve::{Package, PackageId, PackageKind, Remap, Resolve};
pub use resolve::{Package, PackageId, Remap, Resolve};
mod live;
pub use live::LiveTypes;

Expand Down Expand Up @@ -72,9 +72,6 @@ pub struct UnresolvedPackage {
/// The namespace, name, and version information for this package.
pub name: PackageName,

/// Kind
pub kind: PackageKind,

/// All worlds from all documents within this package.
///
/// Each world lists the document that it is from.
Expand Down
11 changes: 0 additions & 11 deletions crates/wit-parser/src/resolve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,6 @@ pub struct Resolve {
pub all_features: bool,
}

#[derive(PartialEq, Clone, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize))]
pub enum PackageKind {
Explicit,
Implicit,
}

/// A WIT package within a `Resolve`.
///
/// A package is a collection of interfaces and worlds. Packages additionally
Expand All @@ -98,9 +91,6 @@ pub struct Package {
/// A unique name corresponding to this package.
pub name: PackageName,

/// Kind
pub kind: PackageKind,

/// Documentation associated with this package.
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Docs::is_empty"))]
pub docs: Docs,
Expand Down Expand Up @@ -1398,7 +1388,6 @@ impl Remap {

let pkgid = resolve.packages.alloc(Package {
name: unresolved.name.clone(),
kind: unresolved.kind.clone(),
docs: unresolved.docs.clone(),
interfaces: Default::default(),
worlds: Default::default(),
Expand Down
1 change: 0 additions & 1 deletion crates/wit-parser/tests/ui/comments.wit.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
"packages": [
{
"name": "foo:comments",
"kind": "Implicit",
"interfaces": {
"foo": 0
},
Expand Down
3 changes: 0 additions & 3 deletions crates/wit-parser/tests/ui/complex-include.wit.json
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,6 @@
"packages": [
{
"name": "foo:bar",
"kind": "Implicit",
"interfaces": {
"a": 0,
"b": 1
Expand All @@ -176,7 +175,6 @@
},
{
"name": "foo:baz",
"kind": "Implicit",
"interfaces": {
"a": 2,
"b": 3
Expand All @@ -187,7 +185,6 @@
},
{
"name": "foo:root",
"kind": "Implicit",
"interfaces": {
"ai": 4,
"bi": 5
Expand Down
2 changes: 0 additions & 2 deletions crates/wit-parser/tests/ui/cross-package-resource.wit.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,13 @@
"packages": [
{
"name": "some:dep",
"kind": "Implicit",
"interfaces": {
"foo": 0
},
"worlds": {}
},
{
"name": "foo:bar",
"kind": "Implicit",
"interfaces": {
"foo": 1
},
Expand Down
3 changes: 0 additions & 3 deletions crates/wit-parser/tests/ui/diamond1.wit.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,23 +36,20 @@
"packages": [
{
"name": "foo:dep1",
"kind": "Implicit",
"interfaces": {
"types": 0
},
"worlds": {}
},
{
"name": "foo:dep2",
"kind": "Implicit",
"interfaces": {
"types": 1
},
"worlds": {}
},
{
"name": "foo:foo",
"kind": "Implicit",
"interfaces": {},
"worlds": {
"foo": 0
Expand Down
Loading

0 comments on commit 5d98d8c

Please sign in to comment.