Move `tests/rustdoc` testsuite to `//@` syntax · rust-lang/rust@d3ec92e

@@ -241,11 +241,236 @@ def concat_multi_lines(f):

241241242242243243

LINE_PATTERN = re.compile(r'''

244-

(?<=(?<!\S))(?P<invalid>!?)@(?P<negated>!?)

245-

(?P<cmd>[A-Za-z]+(?:-[A-Za-z]+)*)

244+

//@\s+

245+

(?P<negated>!?)(?P<cmd>[A-Za-z]+(?:-[A-Za-z]+)*)

246246

(?P<args>.*)$

247247

''', re.X | re.UNICODE)

248248249+

# Equivalent to `src/tools/compiletest/src/header.rs` constant of the same name.

250+

KNOWN_DIRECTIVE_NAMES = [

251+

# tidy-alphabetical-start

252+

"assembly-output",

253+

"aux-bin",

254+

"aux-build",

255+

"aux-codegen-backend",

256+

"aux-crate",

257+

"build-aux-docs",

258+

"build-fail",

259+

"build-pass",

260+

"check-fail",

261+

"check-pass",

262+

"check-run-results",

263+

"check-stdout",

264+

"check-test-line-numbers-match",

265+

"compare-output-lines-by-subset",

266+

"compile-flags",

267+

"dont-check-compiler-stderr",

268+

"dont-check-compiler-stdout",

269+

"dont-check-failure-status",

270+

"edition",

271+

"error-pattern",

272+

"exec-env",

273+

"failure-status",

274+

"filecheck-flags",

275+

"forbid-output",

276+

"force-host",

277+

"ignore-16bit",

278+

"ignore-32bit",

279+

"ignore-64bit",

280+

"ignore-aarch64",

281+

"ignore-aarch64-unknown-linux-gnu",

282+

"ignore-android",

283+

"ignore-apple",

284+

"ignore-arm",

285+

"ignore-avr",

286+

"ignore-beta",

287+

"ignore-cdb",

288+

"ignore-compare-mode-next-solver",

289+

"ignore-compare-mode-polonius",

290+

"ignore-cross-compile",

291+

"ignore-debug",

292+

"ignore-eabi",

293+

"ignore-emscripten",

294+

"ignore-endian-big",

295+

"ignore-freebsd",

296+

"ignore-fuchsia",

297+

"ignore-gdb",

298+

"ignore-gdb-version",

299+

"ignore-gnu",

300+

"ignore-haiku",

301+

"ignore-horizon",

302+

"ignore-i686-pc-windows-msvc",

303+

"ignore-ios",

304+

"ignore-linux",

305+

"ignore-lldb",

306+

"ignore-llvm-version",

307+

"ignore-loongarch64",

308+

"ignore-macabi",

309+

"ignore-macos",

310+

"ignore-mode-assembly",

311+

"ignore-mode-codegen",

312+

"ignore-mode-codegen-units",

313+

"ignore-mode-coverage-map",

314+

"ignore-mode-coverage-run",

315+

"ignore-mode-crashes",

316+

"ignore-mode-debuginfo",

317+

"ignore-mode-incremental",

318+

"ignore-mode-js-doc-test",

319+

"ignore-mode-mir-opt",

320+

"ignore-mode-pretty",

321+

"ignore-mode-run-make",

322+

"ignore-mode-run-pass-valgrind",

323+

"ignore-mode-rustdoc",

324+

"ignore-mode-rustdoc-json",

325+

"ignore-mode-ui",

326+

"ignore-mode-ui-fulldeps",

327+

"ignore-msp430",

328+

"ignore-msvc",

329+

"ignore-musl",

330+

"ignore-netbsd",

331+

"ignore-nightly",

332+

"ignore-none",

333+

"ignore-nto",

334+

"ignore-nvptx64",

335+

"ignore-nvptx64-nvidia-cuda",

336+

"ignore-openbsd",

337+

"ignore-pass",

338+

"ignore-remote",

339+

"ignore-riscv64",

340+

"ignore-s390x",

341+

"ignore-sgx",

342+

"ignore-spirv",

343+

"ignore-stable",

344+

"ignore-stage1",

345+

"ignore-stage2",

346+

"ignore-test",

347+

"ignore-thumb",

348+

"ignore-thumbv8m.base-none-eabi",

349+

"ignore-thumbv8m.main-none-eabi",

350+

"ignore-tvos",

351+

"ignore-unix",

352+

"ignore-unknown",

353+

"ignore-uwp",

354+

"ignore-visionos",

355+

"ignore-vxworks",

356+

"ignore-wasi",

357+

"ignore-wasm",

358+

"ignore-wasm32",

359+

"ignore-wasm32-bare",

360+

"ignore-wasm64",

361+

"ignore-watchos",

362+

"ignore-windows",

363+

"ignore-windows-gnu",

364+

"ignore-x32",

365+

"ignore-x86",

366+

"ignore-x86_64",

367+

"ignore-x86_64-unknown-linux-gnu",

368+

"incremental",

369+

"known-bug",

370+

"llvm-cov-flags",

371+

"min-cdb-version",

372+

"min-gdb-version",

373+

"min-lldb-version",

374+

"min-llvm-version",

375+

"min-system-llvm-version",

376+

"needs-asm-support",

377+

"needs-dlltool",

378+

"needs-dynamic-linking",

379+

"needs-force-clang-based-tests",

380+

"needs-git-hash",

381+

"needs-llvm-components",

382+

"needs-profiler-support",

383+

"needs-relocation-model-pic",

384+

"needs-run-enabled",

385+

"needs-rust-lld",

386+

"needs-rust-lldb",

387+

"needs-sanitizer-address",

388+

"needs-sanitizer-cfi",

389+

"needs-sanitizer-dataflow",

390+

"needs-sanitizer-hwaddress",

391+

"needs-sanitizer-kcfi",

392+

"needs-sanitizer-leak",

393+

"needs-sanitizer-memory",

394+

"needs-sanitizer-memtag",

395+

"needs-sanitizer-safestack",

396+

"needs-sanitizer-shadow-call-stack",

397+

"needs-sanitizer-support",

398+

"needs-sanitizer-thread",

399+

"needs-threads",

400+

"needs-unwind",

401+

"needs-wasmtime",

402+

"needs-xray",

403+

"no-auto-check-cfg",

404+

"no-prefer-dynamic",

405+

"normalize-stderr-32bit",

406+

"normalize-stderr-64bit",

407+

"normalize-stderr-test",

408+

"normalize-stdout-test",

409+

"only-16bit",

410+

"only-32bit",

411+

"only-64bit",

412+

"only-aarch64",

413+

"only-apple",

414+

"only-arm",

415+

"only-avr",

416+

"only-beta",

417+

"only-bpf",

418+

"only-cdb",

419+

"only-gnu",

420+

"only-i686-pc-windows-msvc",

421+

"only-ios",

422+

"only-linux",

423+

"only-loongarch64",

424+

"only-loongarch64-unknown-linux-gnu",

425+

"only-macos",

426+

"only-mips",

427+

"only-mips64",

428+

"only-msp430",

429+

"only-msvc",

430+

"only-nightly",

431+

"only-nvptx64",

432+

"only-riscv64",

433+

"only-sparc",

434+

"only-sparc64",

435+

"only-stable",

436+

"only-thumb",

437+

"only-tvos",

438+

"only-unix",

439+

"only-visionos",

440+

"only-wasm32",

441+

"only-wasm32-bare",

442+

"only-wasm32-wasip1",

443+

"only-watchos",

444+

"only-windows",

445+

"only-x86",

446+

"only-x86_64",

447+

"only-x86_64-fortanix-unknown-sgx",

448+

"only-x86_64-pc-windows-gnu",

449+

"only-x86_64-pc-windows-msvc",

450+

"only-x86_64-unknown-linux-gnu",

451+

"pp-exact",

452+

"pretty-compare-only",

453+

"pretty-expanded",

454+

"pretty-mode",

455+

"regex-error-pattern",

456+

"remap-src-base",

457+

"revisions",

458+

"run-fail",

459+

"run-flags",

460+

"run-pass",

461+

"run-rustfix",

462+

"rustc-env",

463+

"rustfix-only-machine-applicable",

464+

"should-fail",

465+

"should-ice",

466+

"stderr-per-bitwidth",

467+

"test-mir-pass",

468+

"unset-exec-env",

469+

"unset-rustc-env",

470+

# Used by the tidy check `unknown_revision`.

471+

"unused-revision-names",

472+

# tidy-alphabetical-end

473+

]

249474250475

def get_commands(template):

251476

with io.open(template, encoding='utf-8') as f:

@@ -254,17 +479,9 @@ def get_commands(template):

254479

if not m:

255480

continue

256481257-

negated = (m.group('negated') == '!')

258482

cmd = m.group('cmd')

259-

if m.group('invalid') == '!':

260-

print_err(

261-

lineno,

262-

line,

263-

'Invalid command: `!@{0}{1}`, (help: try with `@!{1}`)'.format(

264-

'!' if negated else '',

265-

cmd,

266-

),

267-

)

483+

negated = (m.group('negated') == '!')

484+

if not negated and cmd in KNOWN_DIRECTIVE_NAMES:

268485

continue

269486

args = m.group('args')

270487

if args and not args[:1].isspace():

@@ -549,7 +766,7 @@ def get_nb_matching_elements(cache, c, regexp, stop_at_first):

549766

def check_files_in_folder(c, cache, folder, files):

550767

files = files.strip()

551768

if not files.startswith('[') or not files.endswith(']'):

552-

raise InvalidCheck("Expected list as second argument of @{} (ie '[]')".format(c.cmd))

769+

raise InvalidCheck("Expected list as second argument of {} (ie '[]')".format(c.cmd))

553770554771

folder = cache.get_absolute_path(folder)

555772

@@ -558,7 +775,7 @@ def check_files_in_folder(c, cache, folder, files):

558775

files_set = set()

559776

for file in files:

560777

if file in files_set:

561-

raise InvalidCheck("Duplicated file `{}` in @{}".format(file, c.cmd))

778+

raise InvalidCheck("Duplicated file `{}` in {}".format(file, c.cmd))

562779

files_set.add(file)

563780

folder_set = set([f for f in os.listdir(folder) if f != "." and f != ".."])

564781

@@ -590,48 +807,48 @@ def check_command(c, cache):

590807

if c.cmd in ['has', 'hasraw', 'matches', 'matchesraw']: # string test

591808

regexp = c.cmd.startswith('matches')

592809593-

# @has <path> = file existence

810+

# has <path> = file existence

594811

if len(c.args) == 1 and not regexp and 'raw' not in c.cmd:

595812

try:

596813

cache.get_file(c.args[0])

597814

ret = True

598815

except FailedCheck as err:

599816

cerr = str(err)

600817

ret = False

601-

# @hasraw/matchesraw <path> <pat> = string test

818+

# hasraw/matchesraw <path> <pat> = string test

602819

elif len(c.args) == 2 and 'raw' in c.cmd:

603820

cerr = "`PATTERN` did not match"

604821

ret = check_string(cache.get_file(c.args[0]), c.args[1], regexp)

605-

# @has/matches <path> <pat> <match> = XML tree test

822+

# has/matches <path> <pat> <match> = XML tree test

606823

elif len(c.args) == 3 and 'raw' not in c.cmd:

607824

cerr = "`XPATH PATTERN` did not match"

608825

ret = get_nb_matching_elements(cache, c, regexp, True) != 0

609826

else:

610-

raise InvalidCheck('Invalid number of @{} arguments'.format(c.cmd))

827+

raise InvalidCheck('Invalid number of {} arguments'.format(c.cmd))

611828612829

elif c.cmd == 'files': # check files in given folder

613-

if len(c.args) != 2: # @files <folder path> <file list>

614-

raise InvalidCheck("Invalid number of @{} arguments".format(c.cmd))

830+

if len(c.args) != 2: # files <folder path> <file list>

831+

raise InvalidCheck("Invalid number of {} arguments".format(c.cmd))

615832

elif c.negated:

616-

raise InvalidCheck("@{} doesn't support negative check".format(c.cmd))

833+

raise InvalidCheck("{} doesn't support negative check".format(c.cmd))

617834

ret = check_files_in_folder(c, cache, c.args[0], c.args[1])

618835619836

elif c.cmd == 'count': # count test

620-

if len(c.args) == 3: # @count <path> <pat> <count> = count test

837+

if len(c.args) == 3: # count <path> <pat> <count> = count test

621838

expected = int(c.args[2])

622839

found = get_tree_count(cache.get_tree(c.args[0]), c.args[1])

623840

cerr = "Expected {} occurrences but found {}".format(expected, found)

624841

ret = expected == found

625-

elif len(c.args) == 4: # @count <path> <pat> <text> <count> = count test

842+

elif len(c.args) == 4: # count <path> <pat> <text> <count> = count test

626843

expected = int(c.args[3])

627844

found = get_nb_matching_elements(cache, c, False, False)

628845

cerr = "Expected {} occurrences but found {}".format(expected, found)

629846

ret = found == expected

630847

else:

631-

raise InvalidCheck('Invalid number of @{} arguments'.format(c.cmd))

848+

raise InvalidCheck('Invalid number of {} arguments'.format(c.cmd))

632849633850

elif c.cmd == 'snapshot': # snapshot test

634-

if len(c.args) == 3: # @snapshot <snapshot-name> <html-path> <xpath>

851+

if len(c.args) == 3: # snapshot <snapshot-name> <html-path> <xpath>

635852

[snapshot_name, html_path, pattern] = c.args

636853

tree = cache.get_tree(html_path)

637854

xpath = normalize_xpath(pattern)

@@ -654,33 +871,33 @@ def check_command(c, cache):

654871

else:

655872

raise FailedCheck('Expected 1 match, but found {}'.format(len(subtrees)))

656873

else:

657-

raise InvalidCheck('Invalid number of @{} arguments'.format(c.cmd))

874+

raise InvalidCheck('Invalid number of {} arguments'.format(c.cmd))

658875659876

elif c.cmd == 'has-dir': # has-dir test

660-

if len(c.args) == 1: # @has-dir <path> = has-dir test

877+

if len(c.args) == 1: # has-dir <path> = has-dir test

661878

try:

662879

cache.get_dir(c.args[0])

663880

ret = True

664881

except FailedCheck as err:

665882

cerr = str(err)

666883

ret = False

667884

else:

668-

raise InvalidCheck('Invalid number of @{} arguments'.format(c.cmd))

885+

raise InvalidCheck('Invalid number of {} arguments'.format(c.cmd))

669886670887

elif c.cmd == 'valid-html':

671-

raise InvalidCheck('Unimplemented @valid-html')

888+

raise InvalidCheck('Unimplemented valid-html')

672889673890

elif c.cmd == 'valid-links':

674-

raise InvalidCheck('Unimplemented @valid-links')

891+

raise InvalidCheck('Unimplemented valid-links')

675892676893

else:

677-

raise InvalidCheck('Unrecognized @{}'.format(c.cmd))

894+

raise InvalidCheck('Unrecognized {}'.format(c.cmd))

678895679896

if ret == c.negated:

680897

raise FailedCheck(cerr)

681898682899

except FailedCheck as err:

683-

message = '@{}{} check failed'.format('!' if c.negated else '', c.cmd)

900+

message = '{}{} check failed'.format('!' if c.negated else '', c.cmd)

684901

print_err(c.lineno, c.context, str(err), message)

685902

except InvalidCheck as err:

686903

print_err(c.lineno, c.context, str(err))