1
1
import dataclasses
2
2
import typing
3
+ from collections .abc import Iterable
4
+
3
5
import inflection
4
6
5
7
from misc .codegen .loaders import schemaloader
@@ -27,6 +29,25 @@ class TestCode:
27
29
function : Function | None = None
28
30
29
31
32
+ def _get_code (doc : list [str ]) -> list [str ]:
33
+ adding_code = False
34
+ has_code = False
35
+ code = []
36
+ for line in doc :
37
+ match line , adding_code :
38
+ case ("```" , _) | ("```rust" , _):
39
+ adding_code = not adding_code
40
+ has_code = True
41
+ case _, False :
42
+ code .append (f"// { line } " )
43
+ case _, True :
44
+ code .append (line )
45
+ assert not adding_code , "Unterminated code block in docstring:\n " + "\n " .join (doc )
46
+ if has_code :
47
+ return code
48
+ return []
49
+
50
+
30
51
def generate (opts , renderer ):
31
52
assert opts .ql_test_output
32
53
schema = schemaloader .load_file (opts .schema )
@@ -36,24 +57,18 @@ def generate(opts, renderer):
36
57
force = opts .force ) as renderer :
37
58
for cls in schema .classes .values ():
38
59
if (qlgen .should_skip_qltest (cls , schema .classes ) or
39
- "rust_skip_test_from_doc" in cls .pragmas or
40
- not cls .doc ):
60
+ "rust_skip_doc_test" in cls .pragmas ):
41
61
continue
42
- code = []
43
- adding_code = False
44
- has_code = False
45
- for line in cls .doc :
46
- match line , adding_code :
47
- case ("```" , _) | ("```rust" , _):
48
- adding_code = not adding_code
49
- has_code = True
50
- case _, False :
51
- code .append (f"// { line } " )
52
- case _, True :
53
- code .append (line )
54
- if not has_code :
62
+ code = _get_code (cls .doc )
63
+ for p in schema .iter_properties (cls .name ):
64
+ if "rust_skip_doc_test" in p .pragmas :
65
+ continue
66
+ property_code = _get_code (p .description )
67
+ if property_code :
68
+ code .append (f"// # { p .name } " )
69
+ code += property_code
70
+ if not code :
55
71
continue
56
- assert not adding_code , "Unterminated code block in docstring: " + "\n " .join (cls .doc )
57
72
test_name = inflection .underscore (cls .name )
58
73
signature = cls .pragmas .get ("rust_doc_test_signature" , "() -> ()" )
59
74
fn = signature and Function (f"test_{ test_name } " , signature )
0 commit comments