mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
gen_vimdoc.py: rename mode
to target
This commit is contained in:
parent
b112fe828f
commit
0dcf4bd3eb
@ -63,7 +63,7 @@ fmt_vimhelp = False # HACK
|
|||||||
text_width = 78
|
text_width = 78
|
||||||
script_path = os.path.abspath(__file__)
|
script_path = os.path.abspath(__file__)
|
||||||
base_dir = os.path.dirname(os.path.dirname(script_path))
|
base_dir = os.path.dirname(os.path.dirname(script_path))
|
||||||
out_dir = os.path.join(base_dir, 'tmp-{mode}-doc')
|
out_dir = os.path.join(base_dir, 'tmp-{target}-doc')
|
||||||
filter_cmd = '%s %s' % (sys.executable, script_path)
|
filter_cmd = '%s %s' % (sys.executable, script_path)
|
||||||
seen_funcs = set()
|
seen_funcs = set()
|
||||||
lua2dox_filter = os.path.join(base_dir, 'scripts', 'lua2dox_filter')
|
lua2dox_filter = os.path.join(base_dir, 'scripts', 'lua2dox_filter')
|
||||||
@ -151,15 +151,19 @@ CONFIG = {
|
|||||||
'file_patterns': '*.lua',
|
'file_patterns': '*.lua',
|
||||||
'fn_name_prefix': '',
|
'fn_name_prefix': '',
|
||||||
'section_name': {},
|
'section_name': {},
|
||||||
'section_fmt': lambda name: ('Lua module: vim.lsp'
|
'section_fmt': lambda name: (
|
||||||
|
'Lua module: vim.lsp'
|
||||||
if name.lower() == 'lsp'
|
if name.lower() == 'lsp'
|
||||||
else f'Lua module: vim.lsp.{name.lower()}'),
|
else f'Lua module: vim.lsp.{name.lower()}'),
|
||||||
'helptag_fmt': lambda name: ('*lsp-core*'
|
'helptag_fmt': lambda name: (
|
||||||
|
'*lsp-core*'
|
||||||
if name.lower() == 'lsp'
|
if name.lower() == 'lsp'
|
||||||
else f'*lsp-{name.lower()}*'),
|
else f'*lsp-{name.lower()}*'),
|
||||||
'fn_helptag_fmt': lambda fstem, name: (f'*vim.lsp.{name}()*'
|
'fn_helptag_fmt': lambda fstem, name: (
|
||||||
|
f'*vim.lsp.{name}()*'
|
||||||
if fstem == 'lsp' and name != 'client'
|
if fstem == 'lsp' and name != 'client'
|
||||||
else ('*vim.lsp.client*'
|
else (
|
||||||
|
'*vim.lsp.client*'
|
||||||
# HACK. TODO(justinmk): class/structure support in lua2dox
|
# HACK. TODO(justinmk): class/structure support in lua2dox
|
||||||
if 'lsp.client' == f'{fstem}.{name}'
|
if 'lsp.client' == f'{fstem}.{name}'
|
||||||
else f'*vim.lsp.{fstem}.{name}()*')),
|
else f'*vim.lsp.{fstem}.{name}()*')),
|
||||||
@ -568,7 +572,7 @@ def fmt_node_as_vimhelp(parent, width=62, indent=''):
|
|||||||
return clean_lines('\n'.join(rendered_blocks).strip())
|
return clean_lines('\n'.join(rendered_blocks).strip())
|
||||||
|
|
||||||
|
|
||||||
def extract_from_xml(filename, mode, width):
|
def extract_from_xml(filename, target, width):
|
||||||
"""Extracts Doxygen info as maps without formatting the text.
|
"""Extracts Doxygen info as maps without formatting the text.
|
||||||
|
|
||||||
Returns two maps:
|
Returns two maps:
|
||||||
@ -623,8 +627,8 @@ def extract_from_xml(filename, mode, width):
|
|||||||
fstem = '?'
|
fstem = '?'
|
||||||
if '.' in compoundname:
|
if '.' in compoundname:
|
||||||
fstem = compoundname.split('.')[0]
|
fstem = compoundname.split('.')[0]
|
||||||
fstem = CONFIG[mode]['module_override'].get(fstem, fstem)
|
fstem = CONFIG[target]['module_override'].get(fstem, fstem)
|
||||||
vimtag = CONFIG[mode]['fn_helptag_fmt'](fstem, name)
|
vimtag = CONFIG[target]['fn_helptag_fmt'](fstem, name)
|
||||||
|
|
||||||
params = []
|
params = []
|
||||||
type_length = 0
|
type_length = 0
|
||||||
@ -635,7 +639,7 @@ def extract_from_xml(filename, mode, width):
|
|||||||
declname = get_child(param, 'declname')
|
declname = get_child(param, 'declname')
|
||||||
if declname:
|
if declname:
|
||||||
param_name = get_text(declname).strip()
|
param_name = get_text(declname).strip()
|
||||||
elif CONFIG[mode]['mode'] == 'lua':
|
elif CONFIG[target]['mode'] == 'lua':
|
||||||
# XXX: this is what lua2dox gives us...
|
# XXX: this is what lua2dox gives us...
|
||||||
param_name = param_type
|
param_name = param_type
|
||||||
param_type = ''
|
param_type = ''
|
||||||
@ -715,7 +719,7 @@ def extract_from_xml(filename, mode, width):
|
|||||||
|
|
||||||
if 'Deprecated' in str(xrefs):
|
if 'Deprecated' in str(xrefs):
|
||||||
deprecated_fns[name] = fn
|
deprecated_fns[name] = fn
|
||||||
elif name.startswith(CONFIG[mode]['fn_name_prefix']):
|
elif name.startswith(CONFIG[target]['fn_name_prefix']):
|
||||||
fns[name] = fn
|
fns[name] = fn
|
||||||
|
|
||||||
xrefs.clear()
|
xrefs.clear()
|
||||||
@ -725,7 +729,7 @@ def extract_from_xml(filename, mode, width):
|
|||||||
return (fns, deprecated_fns)
|
return (fns, deprecated_fns)
|
||||||
|
|
||||||
|
|
||||||
def fmt_doxygen_xml_as_vimhelp(filename, mode):
|
def fmt_doxygen_xml_as_vimhelp(filename, target):
|
||||||
"""Entrypoint for generating Vim :help from from Doxygen XML.
|
"""Entrypoint for generating Vim :help from from Doxygen XML.
|
||||||
|
|
||||||
Returns 3 items:
|
Returns 3 items:
|
||||||
@ -736,7 +740,7 @@ def fmt_doxygen_xml_as_vimhelp(filename, mode):
|
|||||||
fmt_vimhelp = True
|
fmt_vimhelp = True
|
||||||
fns_txt = {} # Map of func_name:vim-help-text.
|
fns_txt = {} # Map of func_name:vim-help-text.
|
||||||
deprecated_fns_txt = {} # Map of func_name:vim-help-text.
|
deprecated_fns_txt = {} # Map of func_name:vim-help-text.
|
||||||
fns, _ = extract_from_xml(filename, mode, width=text_width)
|
fns, _ = extract_from_xml(filename, target, width=text_width)
|
||||||
|
|
||||||
for name, fn in fns.items():
|
for name, fn in fns.items():
|
||||||
# Generate Vim :help for parameters.
|
# Generate Vim :help for parameters.
|
||||||
@ -766,7 +770,7 @@ def fmt_doxygen_xml_as_vimhelp(filename, mode):
|
|||||||
|
|
||||||
if 'Deprecated' in xrefs:
|
if 'Deprecated' in xrefs:
|
||||||
deprecated_fns_txt[name] = func_doc
|
deprecated_fns_txt[name] = func_doc
|
||||||
elif name.startswith(CONFIG[mode]['fn_name_prefix']):
|
elif name.startswith(CONFIG[target]['fn_name_prefix']):
|
||||||
fns_txt[name] = func_doc
|
fns_txt[name] = func_doc
|
||||||
|
|
||||||
xrefs.clear()
|
xrefs.clear()
|
||||||
@ -802,26 +806,28 @@ def main(config):
|
|||||||
|
|
||||||
Doxygen is called and configured through stdin.
|
Doxygen is called and configured through stdin.
|
||||||
"""
|
"""
|
||||||
for mode in CONFIG:
|
for target in CONFIG:
|
||||||
if TARGET is not None and mode != TARGET:
|
if TARGET is not None and target != TARGET:
|
||||||
continue
|
continue
|
||||||
mpack_file = os.path.join(
|
mpack_file = os.path.join(
|
||||||
base_dir, 'runtime', 'doc',
|
base_dir, 'runtime', 'doc',
|
||||||
CONFIG[mode]['filename'].replace('.txt', '.mpack'))
|
CONFIG[target]['filename'].replace('.txt', '.mpack'))
|
||||||
if os.path.exists(mpack_file):
|
if os.path.exists(mpack_file):
|
||||||
os.remove(mpack_file)
|
os.remove(mpack_file)
|
||||||
|
|
||||||
output_dir = out_dir.format(mode=mode)
|
output_dir = out_dir.format(target=target)
|
||||||
p = subprocess.Popen(['doxygen', '-'], stdin=subprocess.PIPE,
|
p = subprocess.Popen(
|
||||||
|
['doxygen', '-'],
|
||||||
|
stdin=subprocess.PIPE,
|
||||||
# silence warnings
|
# silence warnings
|
||||||
# runtime/lua/vim/lsp.lua:209: warning: argument 'trace' of command @param is not found in the argument list
|
# runtime/lua/vim/lsp.lua:209: warning: argument 'foo' not found
|
||||||
stderr=subprocess.DEVNULL)
|
stderr=subprocess.DEVNULL)
|
||||||
p.communicate(
|
p.communicate(
|
||||||
config.format(
|
config.format(
|
||||||
input=CONFIG[mode]['files'],
|
input=CONFIG[target]['files'],
|
||||||
output=output_dir,
|
output=output_dir,
|
||||||
filter=filter_cmd,
|
filter=filter_cmd,
|
||||||
file_patterns=CONFIG[mode]['file_patterns'])
|
file_patterns=CONFIG[target]['file_patterns'])
|
||||||
.encode('utf8')
|
.encode('utf8')
|
||||||
)
|
)
|
||||||
if p.returncode:
|
if p.returncode:
|
||||||
@ -858,11 +864,11 @@ def main(config):
|
|||||||
if filename.endswith('.c') or filename.endswith('.lua'):
|
if filename.endswith('.c') or filename.endswith('.lua'):
|
||||||
# Extract unformatted (*.mpack).
|
# Extract unformatted (*.mpack).
|
||||||
fn_map, _ = extract_from_xml(os.path.join(base, '{}.xml'.format(
|
fn_map, _ = extract_from_xml(os.path.join(base, '{}.xml'.format(
|
||||||
compound.getAttribute('refid'))), mode, width=9999)
|
compound.getAttribute('refid'))), target, width=9999)
|
||||||
# Extract formatted (:help).
|
# Extract formatted (:help).
|
||||||
functions_text, deprecated_text = fmt_doxygen_xml_as_vimhelp(
|
functions_text, deprecated_text = fmt_doxygen_xml_as_vimhelp(
|
||||||
os.path.join(base, '{}.xml'.format(
|
os.path.join(base, '{}.xml'.format(
|
||||||
compound.getAttribute('refid'))), mode)
|
compound.getAttribute('refid'))), target)
|
||||||
|
|
||||||
if not functions_text and not deprecated_text:
|
if not functions_text and not deprecated_text:
|
||||||
continue
|
continue
|
||||||
@ -884,26 +890,26 @@ def main(config):
|
|||||||
|
|
||||||
if doc:
|
if doc:
|
||||||
filename = os.path.basename(filename)
|
filename = os.path.basename(filename)
|
||||||
sectname = CONFIG[mode]['section_name'].get(
|
sectname = CONFIG[target]['section_name'].get(
|
||||||
filename, sectname)
|
filename, sectname)
|
||||||
title = CONFIG[mode]['section_fmt'](sectname)
|
title = CONFIG[target]['section_fmt'](sectname)
|
||||||
helptag = CONFIG[mode]['helptag_fmt'](sectname)
|
helptag = CONFIG[target]['helptag_fmt'](sectname)
|
||||||
sections[filename] = (title, helptag, doc)
|
sections[filename] = (title, helptag, doc)
|
||||||
fn_map_full.update(fn_map)
|
fn_map_full.update(fn_map)
|
||||||
|
|
||||||
assert sections
|
assert sections
|
||||||
if len(sections) > len(CONFIG[mode]['section_order']):
|
if len(sections) > len(CONFIG[target]['section_order']):
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
'found new modules "{}"; update the "section_order" map'.format(
|
'found new modules "{}"; update the "section_order" map'.format(
|
||||||
set(sections).difference(CONFIG[mode]['section_order'])))
|
set(sections).difference(CONFIG[target]['section_order'])))
|
||||||
|
|
||||||
docs = ''
|
docs = ''
|
||||||
|
|
||||||
i = 0
|
i = 0
|
||||||
for filename in CONFIG[mode]['section_order']:
|
for filename in CONFIG[target]['section_order']:
|
||||||
title, helptag, section_doc = sections.pop(filename)
|
title, helptag, section_doc = sections.pop(filename)
|
||||||
i += 1
|
i += 1
|
||||||
if filename not in CONFIG[mode]['append_only']:
|
if filename not in CONFIG[target]['append_only']:
|
||||||
docs += sep
|
docs += sep
|
||||||
docs += '\n%s%s' % (title,
|
docs += '\n%s%s' % (title,
|
||||||
helptag.rjust(text_width - len(title)))
|
helptag.rjust(text_width - len(title)))
|
||||||
@ -914,9 +920,9 @@ def main(config):
|
|||||||
docs += ' vim:tw=78:ts=8:ft=help:norl:\n'
|
docs += ' vim:tw=78:ts=8:ft=help:norl:\n'
|
||||||
|
|
||||||
doc_file = os.path.join(base_dir, 'runtime', 'doc',
|
doc_file = os.path.join(base_dir, 'runtime', 'doc',
|
||||||
CONFIG[mode]['filename'])
|
CONFIG[target]['filename'])
|
||||||
|
|
||||||
delete_lines_below(doc_file, CONFIG[mode]['section_start_token'])
|
delete_lines_below(doc_file, CONFIG[target]['section_start_token'])
|
||||||
with open(doc_file, 'ab') as fp:
|
with open(doc_file, 'ab') as fp:
|
||||||
fp.write(docs.encode('utf8'))
|
fp.write(docs.encode('utf8'))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user