4 This script creates a pile of compile-fail tests check that all the
5 derives have spans that point to the fields, rather than the
8 sample usage: src/etc/generate-deriving-span-tests.py
13 TEST_DIR
= os
.path
.abspath(
14 os
.path
.join(os
.path
.dirname(__file__
), '../test/ui/derives/'))
17 // ignore-x86 FIXME: missing sysroot spans (#53081)
18 // This file was auto-generated using 'src/etc/generate-deriving-span-tests.py'
34 ENUM_STRUCT_VARIANT_STRING
= """
48 STRUCT_TUPLE_STRING
= """
55 ENUM_TUPLE
, ENUM_STRUCT
, STRUCT_FIELDS
, STRUCT_TUPLE
= range(4)
57 def create_test_case(type, trait
, super_traits
, error_count
):
58 string
= [ENUM_STRING
, ENUM_STRUCT_VARIANT_STRING
, STRUCT_STRING
, STRUCT_TUPLE_STRING
][type]
59 all_traits
= ','.join([trait
] + super_traits
)
60 super_traits
= ','.join(super_traits
)
61 error_deriving
= '#[derive(%s)]' % super_traits
if super_traits
else ''
63 errors
= '\n'.join('//~%s ERROR' % ('^' * n
) for n
in range(error_count
))
64 code
= string
.format(traits
= all_traits
, errors
= errors
)
65 return TEMPLATE
.format(error_deriving
=error_deriving
, code
= code
)
67 def write_file(name
, string
):
68 test_file
= os
.path
.join(TEST_DIR
, 'derives-span-%s.rs' % name
)
70 # set write permission if file exists, so it can be changed
71 if os
.path
.exists(test_file
):
72 os
.chmod(test_file
, stat
.S_IWUSR
)
74 with
open(test_file
, 'w') as f
:
78 os
.chmod(test_file
, stat
.S_IRUSR|stat
.S_IRGRP|stat
.S_IROTH
)
86 'Default': (STRUCT
, [], 1),
87 'FromPrimitive': (0, [], 0), # only works for C-like enums
89 'Decodable': (0, [], 0), # FIXME: quoting gives horrible spans
90 'Encodable': (0, [], 0), # FIXME: quoting gives horrible spans
93 for (trait
, supers
, errs
) in [('Clone', [], 1),
95 ('PartialOrd', ['PartialEq'], 1),
96 ('Eq', ['PartialEq'], 1),
97 ('Ord', ['Eq', 'PartialOrd', 'PartialEq'], 1),
100 traits
[trait
] = (ALL
, supers
, errs
)
102 for (trait
, (types
, super_traits
, error_count
)) in traits
.items():
103 mk
= lambda ty
: create_test_case(ty
, trait
, super_traits
, error_count
)
105 write_file(trait
+ '-enum', mk(ENUM_TUPLE
))
106 write_file(trait
+ '-enum-struct-variant', mk(ENUM_STRUCT
))
108 write_file(trait
+ '-struct', mk(STRUCT_FIELDS
))
109 write_file(trait
+ '-tuple-struct', mk(STRUCT_TUPLE
))