From b11367e9707dbe3561537d0b20f167f40090a07f Mon Sep 17 00:00:00 2001 From: Julio Castillo Date: Fri, 28 Jan 2022 16:39:33 +0100 Subject: [PATCH] Support nullable variables in tfdoc --- tools/tfdoc.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/tools/tfdoc.py b/tools/tfdoc.py index 43b4f3f60..e987e6fca 100755 --- a/tools/tfdoc.py +++ b/tools/tfdoc.py @@ -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