refactor(parser): use constants for kernel documentation parsers

This commit is contained in:
Orhun Parmaksız 2021-10-28 18:45:56 +03:00
parent 6f3df91efb
commit 8aca59a897
No known key found for this signature in database
GPG key ID: F83424824B3E4B90
6 changed files with 36 additions and 9 deletions

1
Cargo.lock generated
View file

@ -325,6 +325,7 @@ dependencies = [
name = "systeroid-core"
version = "0.1.0"
dependencies = [
"lazy_static",
"sysctl",
"systeroid-parser",
"thiserror",

View file

@ -7,6 +7,7 @@ edition = "2021"
[dependencies]
sysctl = "0.4.2"
thiserror = "1.0.29"
lazy_static = "1.4.0"
[dependencies.systeroid-parser]
version = "0.1.0"

View file

@ -2,8 +2,14 @@
#![warn(missing_docs, clippy::unwrap_used)]
/// Linux kernel parameter handler.
#[macro_use]
extern crate lazy_static;
/// Kernel parameter handler.
pub mod sysctl;
/// Error implementation.
pub mod error;
/// Parsers for the kernel documentation.
pub mod parsers;

View file

@ -0,0 +1,22 @@
use systeroid_parser::parser::Parser;
use systeroid_parser::regex::RegexBuilder;
lazy_static! {
/// Pre-defined parsers for parsing the kernel documentation.
pub static ref PARSERS: Vec<Parser<'static>> = vec![
Parser {
glob_path: "admin-guide/sysctl/*.rst",
regex: RegexBuilder::new("^\n([a-z].*)\n[=,-]{2,}+\n\n")
.multi_line(true)
.build()
.expect("failed to compile regex"),
},
Parser {
glob_path: "networking/*-sysctl.rst",
regex: RegexBuilder::new("^([a-zA-Z0-9_/-]+)[ ]-[ ][a-zA-Z].*$")
.multi_line(true)
.build()
.expect("failed to compile regex"),
},
];
}

View file

@ -2,6 +2,9 @@
#![warn(missing_docs, clippy::unwrap_used)]
/// Export regex crate.
pub use regex;
/// Document parser.
pub mod parser;

View file

@ -9,6 +9,7 @@ use crate::args::Args;
use rayon::prelude::*;
use std::sync::Mutex;
use systeroid_core::error::{Error, Result};
use systeroid_core::parsers::PARSERS;
use systeroid_core::sysctl::Sysctl;
use systeroid_parser::document::Document;
use systeroid_parser::parser::Parser;
@ -17,16 +18,9 @@ use systeroid_parser::parser::Parser;
pub fn run(args: Args) -> Result<()> {
let mut sysctl = Sysctl::init()?;
let parsers = vec![
Parser::new("admin-guide/sysctl/*.rst", "^\n([a-z].*)\n[=,-]{2,}+\n\n")?,
Parser::new(
"networking/*-sysctl.rst",
"^([a-zA-Z0-9_/-]+)[ ]-[ ][a-zA-Z].*$",
)?,
];
let documents = if let Some(kernel_docs) = args.kernel_docs {
let documents = Mutex::new(Vec::new());
parsers.par_iter().try_for_each(|s| {
PARSERS.par_iter().try_for_each(|s| {
let mut documents = documents
.lock()
.map_err(|e| Error::ThreadLockError(e.to_string()))?;