Support nullable variables in tfdoc

This commit is contained in:
Julio Castillo 2022-01-28 16:39:33 +01:00 committed by Julio Castillo
parent 1cc59a368d
commit b11367e970
1 changed files with 11 additions and 8 deletions

View File

@ -105,14 +105,14 @@ VAR_RE = re.compile(r'''(?smx)
(?:^(.*?)$)
''')
VAR_RE_TYPE = re.compile(r'([\(\{\}\)])')
VAR_TEMPLATE = ('default', 'description', 'type')
VAR_TEMPLATE = ('default', 'description', 'type', 'nullable')
File = collections.namedtuple('File', 'name description modules resources')
Output = collections.namedtuple('Output',
'name description sensitive consumers line')
Variable = collections.namedtuple(
'Variable', 'name description type default required source line')
'Variable', 'name description type default required nullable source line')
# parsing functions
@ -129,7 +129,6 @@ def _parse(body, enum=VAR_ENUM, re=VAR_RE, template=VAR_TEMPLATE):
for m in re.finditer(body):
token = enum(m.lastindex)
data = m.group(m.lastindex)
# print(token, m.groups())
if token == enum.OPEN:
match = m.group(0)
leading_lines = len(match) - len(match.lstrip("\n"))
@ -189,7 +188,8 @@ def parse_outputs(basepath):
except (IOError, OSError) as e:
raise SystemExit(f'No outputs file in {basepath}.')
for item in _parse(body, enum=OUT_ENUM, re=OUT_RE, template=OUT_TEMPLATE):
yield Output(name=item['name'], description=''.join(item['description']),
yield Output(name=item['name'],
description=''.join(item['description']),
sensitive=item['sensitive'] != [],
consumers=item['tags'].get('output:consumers', ''),
line=item['line'])
@ -203,17 +203,20 @@ def parse_variables(basepath):
except (IOError, OSError) as e:
raise SystemExit(f'No variables file in {basepath}.')
for item in _parse(body):
# print(item)
default = HEREDOC_RE.sub(r'\1', '\n'.join(item['default']))
required = not item['default']
vtype = '\n'.join(item['type'])
nullable = item.get('nullable') != ['false']
if not required and default != 'null' and vtype == 'string':
default = f'"{default}"'
yield Variable(name=item['name'], description=''.join(item['description']),
type=vtype, default=default,
yield Variable(name=item['name'],
description=''.join(item['description']),
type=vtype,
default=default,
required=required,
source=item['tags'].get('variable:source', ''),
line=item['line'])
line=item['line'],
nullable=nullable)
# formatting functions