8000 Move `tests/rustdoc` testsuite to `//@` syntax · rust-lang/rust@d3ec92e · GitHub
[go: up one dir, main page]

Skip to content
Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit d3ec92e

Browse files
Move tests/rustdoc testsuite to //@ syntax
1 parent 2c243d9 commit d3ec92e

File tree

2 files changed

+283
-37
lines changed

2 files changed

+283
-37
lines changed

src/etc/htmldocck.py

Lines changed: 249 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,236 @@ def concat_multi_lines(f):
241241

242242

243243
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)
248248

249+
# 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+
]
249474

250475
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
256481

257-
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))
553770

554771
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')
592809

593-
# @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))
611828

612829
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])
618835

619836
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))
632849

633850
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))
658875

659876
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))
669886

670887
elif c.cmd == 'valid-html':
671-
raise InvalidCheck('Unimplemented @valid-html')
888+
raise InvalidCheck('Unimplemented valid-html')
672889

673890
elif c.cmd == 'valid-links':
674-
raise InvalidCheck('Unimplemented @valid-links')
891+
raise InvalidCheck('Unimplemented valid-links')
675892

676893
else:
677-
raise InvalidCheck('Unrecognized @{}'.format(c.cmd))
894+
raise InvalidCheck('Unrecognized {}'.format(c.cmd))
678895

679896
if ret == c.negated:
680897
raise FailedCheck(cerr)
681898

682899
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))

0 commit comments

Comments
 (0)
0