From e4c4a77d03ffe02ec5b3fda71eb4ccd97e9cdf58 Mon Sep 17 00:00:00 2001 From: Akshay Date: Tue, 19 Oct 2021 19:31:01 +0530 Subject: refactor out lint runner into lint module --- bin/src/main.rs | 43 ++++++------------------------------------- 1 file changed, 6 insertions(+), 37 deletions(-) (limited to 'bin/src/main.rs') diff --git a/bin/src/main.rs b/bin/src/main.rs index b26151d..a3f04d7 100644 --- a/bin/src/main.rs +++ b/bin/src/main.rs @@ -1,57 +1,26 @@ -#![feature(path_try_exists)] - mod config; mod err; +mod lint; mod traits; use std::io; -use crate::{ - err::{LintErr, StatixErr}, - traits::{LintResult, WriteDiagnostic}, -}; +use crate::{err::StatixErr, traits::WriteDiagnostic}; use clap::Clap; use config::{LintConfig, Opts, SubCommand}; -use lib::LINTS; -use rnix::WalkEvent; -use vfs::VfsEntry; - -fn analyze<'ρ>(vfs_entry: VfsEntry<'ρ>) -> Result { - let source = vfs_entry.contents; - let parsed = rnix::parse(source) - .as_result() - .map_err(|e| LintErr::Parse(vfs_entry.file_path.to_path_buf(), e))?; - let reports = parsed - .node() - .preorder_with_tokens() - .filter_map(|event| match event { - WalkEvent::Enter(child) => LINTS.get(&child.kind()).map(|rules| { - rules - .iter() - .filter_map(|rule| rule.validate(&child)) - .collect::>() - }), - _ => None, - }) - .flatten() - .collect(); - Ok(LintResult { - file_id: vfs_entry.file_id, - reports, - }) -} fn _main() -> Result<(), StatixErr> { - // TODO: accept cli args, construct a CLI config with a list of files to analyze let opts = Opts::parse(); match opts.subcmd { - Some(SubCommand::Fix(_)) => {} + Some(SubCommand::Fix(_)) => { + eprintln!("`fix` not yet supported"); + } None => { let lint_config = LintConfig::from_opts(opts)?; let vfs = lint_config.vfs()?; let (reports, errors): (Vec<_>, Vec<_>) = - vfs.iter().map(analyze).partition(Result::is_ok); + vfs.iter().map(lint::lint).partition(Result::is_ok); let lint_results: Vec<_> = reports.into_iter().map(Result::unwrap).collect(); let errors: Vec<_> = errors.into_iter().map(Result::unwrap_err).collect(); -- cgit v1.2.3