Skip to content

Commit

Permalink
[WIP] develop the style/output of lint
Browse files Browse the repository at this point in the history
  • Loading branch information
JamieMason committed Oct 24, 2024
1 parent ea290f1 commit c00d03c
Show file tree
Hide file tree
Showing 8 changed files with 683 additions and 439 deletions.
151 changes: 22 additions & 129 deletions fixtures/fluid-framework/.syncpackrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,153 +10,46 @@
"strategy": "name@version"
}
},
"source": ["**/package.json"],
"source": [
"**/package.json"
],
"semverGroups": [
{
"label": "Version compatibility workarounds should be used, or removed from syncpack.config.cjs if no longer needed.",
"dependencies": ["@oclif/core"],
"dependencyTypes": ["pnpmOverrides"],
"packages": ["**"],
"range": "~"
},
{
"label": "engines.node should always use >= ranges",
"dependencyTypes": ["engines"],
"dependencies": ["node"],
"packages": ["**"],
"range": ">="
},
{
"label": "engines.npm should always use caret ranges",
"dependencyTypes": ["engines"],
"dependencies": ["npm"],
"packages": ["**"],
"dependencyTypes": [
"dev"
],
"range": "^"
},
{
"label": "packageManager should always use exact dependency ranges",
"dependencyTypes": ["packageManager"],
"dependencies": ["**"],
"packages": ["**"],
"range": ""
},
{
"dependencies": ["**"],
"packages": ["@fluid-experimental/property-*"],
"isIgnored": true
},
{
"label": "Overridden server dependencies should always be exact versions",
"dependencyTypes": ["pnpmOverrides"],
"dependencies": [
"@fluidframework/gitresources",
"@fluidframework/protocol-base",
"@fluidframework/server-*"
"dependencyTypes": [
"prod"
],
"packages": ["**"],
"range": ""
},
{
"label": "Deps in pnpm overrides can use whatever dependency ranges they need",
"dependencyTypes": ["pnpmOverrides"],
"dependencies": ["**"],
"packages": ["**"],
"isIgnored": true
},
}
],
"versionGroups": [
{
"label": "Must use exact dependency ranges",
"label": "Ignore TypeScript",
"dependencies": [
"@tiny-calc/*",
"@graphql-codegen/cli",
"@graphql-codegen/typescript",
"@material-ui/*",
"@types/chrome",
"@types/codemirror",
"@types/expect-puppeteer",
"@types/jest-environment-puppeteer",
"@types/jest",
"@types/puppeteer",
"@types/url-parse",
"fake-indexeddb",
"json-stringify-safe",
"yargs"
"*typescript*"
],
"packages": ["**"],
"range": ""
"isIgnored": true
},
{
"label": "Must use caret dependency ranges",
"label": "Snap Biome",
"dependencies": [
"eslint-plugin-*",
"eslint-config-prettier",
"eslint",
"less",
"prettier",
"typescript",
"vue",
"webpack-dev-server",
"@cerner/duplicate-package-checker-webpack-plugin"
"@biomejs/biome"
],
"packages": ["**"],
"range": "^"
},
{
"label": "Dependencies should use caret dependency ranges",
"dependencies": ["**"],
"dependencyTypes": ["dev", "peer", "prod"],
"packages": ["**"],
"range": "^"
}
],
"versionGroups": [
{
"label": "Example of banned dependency",
"dependencies": ["lodash"],
"isBanned": true
},
{
"label": "Example of pinned dependency",
"dependencies": ["@types/chai"],
"pinVersion": "4.0.0"
"snapTo": [
"@fluidframework/azure-local-service"
]
},
{
"label": "Example of same range dependency",
"dependencies": ["@fluidframework/build-common"],
"policy": "sameRange"
},
{
"label": "Example of lowest version group",
"dependencies": ["@types/mocha"],
"preferVersion": "lowestSemver"
},
{
"label": "Example of snapped to version group",
"dependencies": ["**"],
"packages": ["fluid-framework", "@fluidframework/undo-redo"],
"snapTo": ["@fluidframework/core-utils"]
},
{
"label": "Versions of common Fluid packages should all match",
"label": "Pin arethetypeswrong",
"dependencies": [
"@fluidframework/build-common",
"@fluidframework/common-utils",
"@fluidframework/eslint-config-fluid",
"@fluidframework/build-tools",
"@fluid-tools/build-cli"
"@arethetypeswrong/cli"
],
"packages": ["**"]
},
{
"label": "Versions in engines field should all match",
"dependencyTypes": ["engines"],
"dependencies": ["**"],
"packages": ["**"]
},
{
"label": "Versions in packageManager field should all match",
"dependencyTypes": ["packageManager"],
"dependencies": ["**"],
"packages": ["**"]
"pinVersion": "~0.2.2"
}
]
}
2 changes: 1 addition & 1 deletion justfile
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ run-fluid-prod:
# Watch lint output during dev
watch-fluid:
#!/usr/bin/env bash
cargo watch --clear --shell 'cd fixtures/fluid-framework && RUST_BACKTRACE=1 cargo run -- lint --versions --format'
tput rmam && cargo watch --clear --shell 'cd fixtures/fluid-framework && RUST_BACKTRACE=1 cargo run -- lint --versions --format'
# ==============================================================================
# Build
Expand Down
10 changes: 10 additions & 0 deletions src/dependency.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,16 @@ impl Dependency {
.fold(InstanceState::Unknown, |acc, instance| acc.max(instance.state.borrow().clone()))
}

/// Return every unique instance state which applies to this group
pub fn get_states(&self) -> Vec<InstanceState> {
self
.instances
.borrow()
.iter()
.map(|instance| instance.state.borrow().clone())
.collect::<Vec<_>>()
}

pub fn get_instances_by_specifier(&self) -> BTreeMap<String, Vec<Rc<Instance>>> {
let mut map = BTreeMap::new();
for instance in self.instances.borrow().iter() {
Expand Down
38 changes: 9 additions & 29 deletions src/effects/lint.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
use itertools::Itertools;

use crate::{context::Context, effects::ui::Ui, version_group::VersionGroupVariant};
use crate::{context::Context, effects::ui::Ui};

/// Run the lint command side effects
pub fn run(ctx: Context) -> Context {
// @TODO: move values to config file
let ui = Ui {
ctx: &ctx,
show_ignored: true,
show_instances: true,
show_instances: false,
show_status_codes: true,
show_packages: false,
// @TODO: show_valid: false,
// @TODO: sort_by: "name" | "state" | "count",
};

if ctx.config.cli.options.versions {
Expand All @@ -19,34 +21,12 @@ pub fn run(ctx: Context) -> Context {
ui.print_group_header(group);
group.dependencies.borrow().values().for_each(|dependency| {
dependency.sort_instances();
match dependency.variant {
VersionGroupVariant::Banned => {
ui.print_dependency_header(dependency);
ui.print_instances(&dependency.instances.borrow());
ui.print_dependency(dependency, &group.variant);
ui.for_each_instance(dependency, |instance| {
if ui.show_instances {
ui.print_instance(instance, &group.variant);
}
VersionGroupVariant::HighestSemver | VersionGroupVariant::LowestSemver => {
ui.print_dependency_header(dependency);
ui.print_instances(&dependency.instances.borrow());
}
VersionGroupVariant::Ignored => {
if ui.show_ignored {
ui.print_dependency_header(dependency);
ui.print_instances(&dependency.instances.borrow());
}
}
VersionGroupVariant::Pinned => {
ui.print_dependency_header(dependency);
ui.print_instances(&dependency.instances.borrow());
}
VersionGroupVariant::SameRange => {
ui.print_dependency_header(dependency);
ui.print_instances(&dependency.instances.borrow());
}
VersionGroupVariant::SnappedTo => {
ui.print_dependency_header(dependency);
ui.print_instances(&dependency.instances.borrow());
}
}
});
});
});
}
Expand Down
Loading

0 comments on commit c00d03c

Please sign in to comment.