Skip to content

Commit

Permalink
Unrolled build for rust-lang#137103
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#137103 - yotamofek:pr/jsonhtmldocck-deprecated-syntax, r=aDotInTheVoid

{json|html}docck: catch and error on deprecated syntax

rust-lang#137099 (review)
  • Loading branch information
rust-timer authored Mar 3, 2025
2 parents d491662 + 797ef64 commit 7924cbe
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 15 deletions.
14 changes: 14 additions & 0 deletions src/etc/htmldocck.py
Original file line number Diff line number Diff line change
Expand Up @@ -297,10 +297,24 @@ def filter_line(line):
re.X | re.UNICODE,
)

DEPRECATED_LINE_PATTERN = re.compile(
r"""
//\s+@
""",
re.X | re.UNICODE,
)


def get_commands(template):
with io.open(template, encoding="utf-8") as f:
for lineno, line in concat_multi_lines(f):
if DEPRECATED_LINE_PATTERN.search(line):
print_err(
lineno,
line,
"Deprecated command syntax, replace `// @` with `//@ `",
)
continue
m = LINE_PATTERN.search(line)
if not m:
continue
Expand Down
43 changes: 28 additions & 15 deletions src/tools/jsondocck/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::borrow::Cow;
use std::process::ExitCode;
use std::sync::OnceLock;
use std::sync::LazyLock;
use std::{env, fs};

use regex::{Regex, RegexBuilder};
Expand Down Expand Up @@ -151,8 +151,7 @@ impl CommandKind {
}
}

static LINE_PATTERN: OnceLock<Regex> = OnceLock::new();
fn line_pattern() -> Regex {
static LINE_PATTERN: LazyLock<Regex> = LazyLock::new(|| {
RegexBuilder::new(
r#"
//@\s+
Expand All @@ -165,7 +164,19 @@ fn line_pattern() -> Regex {
.unicode(true)
.build()
.unwrap()
}
});

static DEPRECATED_LINE_PATTERN: LazyLock<Regex> = LazyLock::new(|| {
RegexBuilder::new(
r#"
//\s+@
"#,
)
.ignore_whitespace(true)
.unicode(true)
.build()
.unwrap()
});

fn print_err(msg: &str, lineno: usize) {
eprintln!("Invalid command: {} on line {}", msg, lineno)
Expand All @@ -184,21 +195,23 @@ fn get_commands(template: &str) -> Result<Vec<Command>, ()> {
for (lineno, line) in file.split('\n').enumerate() {
let lineno = lineno + 1;

let cap = match LINE_PATTERN.get_or_init(line_pattern).captures(line) {
Some(c) => c,
None => continue,
if DEPRECATED_LINE_PATTERN.is_match(line) {
print_err("Deprecated command syntax, replace `// @` with `//@ `", lineno);
errors = true;
continue;
}

let Some(cap) = LINE_PATTERN.captures(line) else {
continue;
};

let negated = cap.name("negated").unwrap().as_str() == "!";
let negated = &cap["negated"] == "!";

let args_str = &cap["args"];
let args = match shlex::split(args_str) {
Some(args) => args,
None => {
print_err(&format!("Invalid arguments to shlex::split: `{args_str}`",), lineno);
errors = true;
continue;
}
let Some(args) = shlex::split(args_str) else {
print_err(&format!("Invalid arguments to shlex::split: `{args_str}`",), lineno);
errors = true;
continue;
};

if let Some((kind, path)) = CommandKind::parse(&cap["cmd"], negated, &args) {
Expand Down

0 comments on commit 7924cbe

Please sign in to comment.