use crate::verification::{
file_existence_verifier::FileExistenceVerifier, node::RustNode,
syntax_verifier::SyntaxVerifier, verification_error::VerificationError,
};
pub fn verify(path: String) -> Result<(), VerificationError> {
let file_existence_verifier = FileExistenceVerifier::new();
match file_existence_verifier.verify(path) {
Err(e) => Err(e),
Ok(contents) => {
let mut syntax_verifier = create_syntax_verifier();
syntax_verifier.verify(&contents)
}
}
}
fn create_syntax_verifier() -> SyntaxVerifier {
let mut syntax_verifier = SyntaxVerifier::new();
syntax_verifier
.allow_node(RustNode::AngleBracketedGenericArguments)
.allow_node(RustNode::Arm)
.allow_node(RustNode::AssocConst)
.allow_node(RustNode::AssocType)
.allow_node(RustNode::BinOp)
.allow_node(RustNode::Block)
.allow_node(RustNode::Constraint)
.allow_node(RustNode::Expr)
.allow_node(RustNode::ExprArray)
.allow_node(RustNode::ExprAssign)
.allow_node(RustNode::ExprBinary)
.allow_node(RustNode::ExprBlock)
.allow_node(RustNode::ExprBreak)
.allow_node(RustNode::ExprCall)
.allow_node(RustNode::ExprCast)
.allow_node(RustNode::ExprClosure)
.allow_node(RustNode::ExprConst)
.allow_node(RustNode::ExprContinue)
.allow_node(RustNode::ExprField)
.allow_node(RustNode::ExprForLoop)
.allow_node(RustNode::ExprGroup)
.allow_node(RustNode::ExprIf)
.allow_node(RustNode::ExprIndex)
.allow_node(RustNode::ExprInfer)
.allow_node(RustNode::ExprLet)
.allow_node(RustNode::ExprLit)
.allow_node(RustNode::ExprLoop)
.allow_node(RustNode::ExprMatch)
.allow_node(RustNode::ExprMethodCall)
.allow_node(RustNode::ExprParen)
.allow_node(RustNode::ExprPath)
.allow_node(RustNode::ExprRange)
.allow_node(RustNode::ExprReference)
.allow_node(RustNode::ExprRepeat)
.allow_node(RustNode::ExprReturn)
.allow_node(RustNode::ExprStruct)
.allow_node(RustNode::ExprTuple)
.allow_node(RustNode::ExprUnary)
.allow_node(RustNode::ExprWhile)
.allow_node(RustNode::Field)
.allow_node(RustNode::FieldMutability)
.allow_node(RustNode::FieldPat)
.allow_node(RustNode::FieldValue)
.allow_node(RustNode::Fields)
.allow_node(RustNode::FieldsNamed)
.allow_node(RustNode::FieldsUnnamed)
.allow_node(RustNode::File)
.allow_node(RustNode::FnArg)
.allow_node(RustNode::GenericArgument)
.allow_node(RustNode::GenericParam)
.allow_node(RustNode::Generics)
.allow_node(RustNode::Ident)
.allow_node(RustNode::ImplItem)
.allow_node(RustNode::ImplItemConst)
.allow_node(RustNode::ImplItemFn)
.allow_node(RustNode::ImplItemType)
.allow_node(RustNode::Index)
.allow_node(RustNode::Item)
.allow_node(RustNode::ItemConst)
.allow_node(RustNode::ItemEnum)
.allow_node(RustNode::ItemFn)
.allow_node(RustNode::ItemImpl)
.allow_node(RustNode::ItemStruct)
.allow_node(RustNode::ItemTrait)
.allow_node(RustNode::ItemTraitAlias)
.allow_node(RustNode::ItemType)
.allow_node(RustNode::ItemUnion)
.allow_node(RustNode::ItemUse)
.allow_node(RustNode::Label)
.allow_node(RustNode::Lifetime)
.allow_node(RustNode::LifetimeParam)
.allow_node(RustNode::Lit)
.allow_node(RustNode::LitBool)
.allow_node(RustNode::LitByte)
.allow_node(RustNode::LitByteStr)
.allow_node(RustNode::LitCstr)
.allow_node(RustNode::LitChar)
.allow_node(RustNode::LitFloat)
.allow_node(RustNode::LitInt)
.allow_node(RustNode::LitStr)
.allow_node(RustNode::Local)
.allow_node(RustNode::LocalInit)
.allow_node(RustNode::Member)
.allow_node(RustNode::Meta)
.allow_node(RustNode::MetaList)
.allow_node(RustNode::MetaNameValue)
.allow_node(RustNode::ParenthesizedGenericArguments)
.allow_node(RustNode::Pat)
.allow_node(RustNode::PatIdent)
.allow_node(RustNode::PatOr)
.allow_node(RustNode::PatParen)
.allow_node(RustNode::PatReference)
.allow_node(RustNode::PatRest)
.allow_node(RustNode::PatSlice)
.allow_node(RustNode::PatStruct)
.allow_node(RustNode::PatTuple)
.allow_node(RustNode::PatTupleStruct)
.allow_node(RustNode::PatType)
.allow_node(RustNode::PatWild)
.allow_node(RustNode::Path)
.allow_node(RustNode::PathArguments)
.allow_node(RustNode::PathSegment)
.allow_node(RustNode::PredicateLifetime)
.allow_node(RustNode::PredicateType)
.allow_node(RustNode::Qself)
.allow_node(RustNode::RangeLimits)
.allow_node(RustNode::Receiver)
.allow_node(RustNode::ReturnType)
.allow_node(RustNode::Signature)
.allow_node(RustNode::Stmt)
.allow_node(RustNode::TokenStream)
.allow_node(RustNode::TraitBound)
.allow_node(RustNode::TraitBoundModifier)
.allow_node(RustNode::TraitItem)
.allow_node(RustNode::TraitItemConst)
.allow_node(RustNode::TraitItemFn)
.allow_node(RustNode::TraitItemType)
.allow_node(RustNode::Type)
.allow_node(RustNode::TypeArray)
.allow_node(RustNode::TypeGroup)
.allow_node(RustNode::TypeImplTrait)
.allow_node(RustNode::TypeInfer)
.allow_node(RustNode::TypeNever)
.allow_node(RustNode::TypeParam)
.allow_node(RustNode::TypeParamBound)
.allow_node(RustNode::TypeParen)
.allow_node(RustNode::TypePath)
.allow_node(RustNode::TypeReference)
.allow_node(RustNode::TypeSlice)
.allow_node(RustNode::TypeTraitObject)
.allow_node(RustNode::TypeTuple)
.allow_node(RustNode::UnOp)
.allow_node(RustNode::UseGroup)
.allow_node(RustNode::UseName)
.allow_node(RustNode::UsePath)
.allow_node(RustNode::UseTree)
.allow_node(RustNode::Variant)
.allow_node(RustNode::VisRestricted)
.allow_node(RustNode::Visibility)
.allow_node(RustNode::WhereClause)
.allow_node(RustNode::WherePredicate)
.allow_relative_path_crate()
.allow_relative_path_self()
.allow_relative_path_super()
.allow_relative_path_simple()
.allow_path_prefix("std::collections::")
.allow_path_prefix("stock_trek::");
syntax_verifier
}