refactor(parser): skip the section explanations while parsing titles

This commit is contained in:
Orhun Parmaksız 2021-10-09 13:56:52 +03:00
parent 96c682f18b
commit 314b8112bd
No known key found for this signature in database
GPG key ID: F83424824B3E4B90
3 changed files with 76 additions and 0 deletions

62
Cargo.lock generated
View file

@ -2,6 +2,15 @@
# It is not intended for manual editing.
version = 3
[[package]]
name = "aho-corasick"
version = "0.7.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
dependencies = [
"memchr",
]
[[package]]
name = "block-buffer"
version = "0.7.3"
@ -79,16 +88,52 @@ name = "kparams-parser"
version = "0.1.0"
dependencies = [
"kparams-core",
"lazy-regex",
"pest",
"pest_derive",
]
[[package]]
name = "lazy-regex"
version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17d198f91272f6e788a5c0bd5d741cf778da4e5bc761ec67b32d5d3b0db34a54"
dependencies = [
"lazy-regex-proc_macros",
"once_cell",
"regex",
]
[[package]]
name = "lazy-regex-proc_macros"
version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c12938b1b92cf5be22940527e15b79fd0c7e706e34bc70816f6a72b3484f84e"
dependencies = [
"proc-macro2",
"quote",
"regex",
"syn",
]
[[package]]
name = "maplit"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
[[package]]
name = "memchr"
version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
[[package]]
name = "once_cell"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
[[package]]
name = "opaque-debug"
version = "0.2.3"
@ -156,6 +201,23 @@ dependencies = [
"proc-macro2",
]
[[package]]
name = "regex"
version = "1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.6.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
[[package]]
name = "sha-1"
version = "0.8.2"

View file

@ -7,6 +7,7 @@ edition = "2021"
[dependencies]
pest = "2.1.3"
pest_derive = "2.1.0"
lazy-regex = "2.2.1"
[dependencies.kparams-core]
version = "0.1.0"

View file

@ -1,9 +1,18 @@
use crate::parser::Rule;
use kparams_core::error::Error as ErrorImpl;
use lazy_regex::{regex, Lazy, Regex};
use pest::iterators::Pair;
use pest::Token;
use std::convert::TryFrom;
/// Regex for matching the explanation of the sysctl sections.
///
/// These _titles_ should be skipped since they are often describing the
/// documentation in the following section rather than a kernel parameter.
///
/// e.g. `2. /proc/sys/fs/binfmt_misc`
static SECTION_EXPL_REGEX: &Lazy<Regex> = regex!("[0-9].\\s/proc/sys/");
/// Title from the parsed RST document.
#[derive(Debug, Default)]
pub struct Title<'a> {
@ -34,6 +43,10 @@ impl<'a> TryFrom<Pair<'a, Rule>> for Title<'a> {
return Err(ErrorImpl::ParseError(String::from(
"document beginning found",
)));
} else if SECTION_EXPL_REGEX.is_match(value) {
return Err(ErrorImpl::ParseError(String::from(
"section explanation found",
)));
}
title.value = value;
} else {