mirror of
https://github.com/powerline/powerline.git
synced 2025-07-29 00:34:49 +02:00
Record docstring marks
This commit is contained in:
parent
59e039ab5b
commit
3a608d838d
@ -12,7 +12,7 @@ from copy import copy
|
|||||||
from powerline.lint.markedjson import load
|
from powerline.lint.markedjson import load
|
||||||
from powerline import generate_config_finder, get_config_paths, load_config
|
from powerline import generate_config_finder, get_config_paths, load_config
|
||||||
from powerline.lib.config import ConfigLoader
|
from powerline.lib.config import ConfigLoader
|
||||||
from powerline.lint.markedjson.error import echoerr, MarkedError
|
from powerline.lint.markedjson.error import echoerr, MarkedError, Mark
|
||||||
from powerline.lint.markedjson.markedvalue import MarkedUnicode
|
from powerline.lint.markedjson.markedvalue import MarkedUnicode
|
||||||
from powerline.segments.vim import vim_modes
|
from powerline.segments.vim import vim_modes
|
||||||
from powerline.lint.inspect import getconfigargspec
|
from powerline.lint.inspect import getconfigargspec
|
||||||
@ -964,12 +964,24 @@ def check_segment_name(name, data, context, echoerr):
|
|||||||
|
|
||||||
if func.__doc__:
|
if func.__doc__:
|
||||||
H_G_USED_STR = 'Highlight groups used: '
|
H_G_USED_STR = 'Highlight groups used: '
|
||||||
|
LHGUS = len(H_G_USED_STR)
|
||||||
D_H_G_USED_STR = 'Divider highlight group used: '
|
D_H_G_USED_STR = 'Divider highlight group used: '
|
||||||
for line in func.__doc__.split('\n'):
|
LDHGUS = len(D_H_G_USED_STR)
|
||||||
|
pointer = 0
|
||||||
|
mark_name = '<{0} docstring>'.format(name)
|
||||||
|
for i, line in enumerate(func.__doc__.split('\n')):
|
||||||
if H_G_USED_STR in line:
|
if H_G_USED_STR in line:
|
||||||
hl_groups.append(line[line.index(H_G_USED_STR) + len(H_G_USED_STR):])
|
idx = line.index(H_G_USED_STR) + LHGUS
|
||||||
|
hl_groups.append((
|
||||||
|
line[idx:],
|
||||||
|
(mark_name, i + 1, idx + 1, func.__doc__),
|
||||||
|
pointer + idx
|
||||||
|
))
|
||||||
elif D_H_G_USED_STR in line:
|
elif D_H_G_USED_STR in line:
|
||||||
divider_hl_group = line[line.index(D_H_G_USED_STR) + len(D_H_G_USED_STR) + 2:-3]
|
idx = line.index(D_H_G_USED_STR) + LDHGUS + 2
|
||||||
|
mark = Mark(mark_name, i + 1, idx + 1, func.__doc__, pointer + idx)
|
||||||
|
divider_hl_group = MarkedUnicode(line[idx:-3], mark)
|
||||||
|
pointer += len(line) + len('\n')
|
||||||
|
|
||||||
hadproblem = False
|
hadproblem = False
|
||||||
|
|
||||||
@ -988,11 +1000,28 @@ def check_segment_name(name, data, context, echoerr):
|
|||||||
|
|
||||||
if hl_groups:
|
if hl_groups:
|
||||||
greg = re.compile(r'``([^`]+)``( \(gradient\))?')
|
greg = re.compile(r'``([^`]+)``( \(gradient\))?')
|
||||||
hl_groups = [
|
parsed_hl_groups = []
|
||||||
[greg.match(subs).groups() for subs in s.split(' or ')]
|
for line, mark_args, pointer in hl_groups:
|
||||||
for s in (list_sep.join(hl_groups)).split(', ')
|
for s in line.split(', '):
|
||||||
]
|
required_pack = []
|
||||||
for required_pack in hl_groups:
|
sub_pointer = pointer
|
||||||
|
for subs in s.split(' or '):
|
||||||
|
match = greg.match(subs)
|
||||||
|
try:
|
||||||
|
if not match:
|
||||||
|
continue
|
||||||
|
hl_group = MarkedUnicode(
|
||||||
|
match.group(1),
|
||||||
|
Mark(*mark_args, pointer=sub_pointer + match.start(1))
|
||||||
|
)
|
||||||
|
gradient = bool(match.group(2))
|
||||||
|
required_pack.append((hl_group, gradient))
|
||||||
|
finally:
|
||||||
|
sub_pointer += len(subs) + len(' or ')
|
||||||
|
parsed_hl_groups.append(required_pack)
|
||||||
|
pointer += len(s) + len(', ')
|
||||||
|
del hl_group, gradient
|
||||||
|
for required_pack in parsed_hl_groups:
|
||||||
rs = [
|
rs = [
|
||||||
hl_exists(hl_group, data, context, echoerr, allow_gradients=('force' if gradient else False))
|
hl_exists(hl_group, data, context, echoerr, allow_gradients=('force' if gradient else False))
|
||||||
for hl_group, gradient in required_pack
|
for hl_group, gradient in required_pack
|
||||||
@ -1080,7 +1109,7 @@ def hl_exists(hl_group, data, context, echoerr, allow_gradients=False):
|
|||||||
echoerr(
|
echoerr(
|
||||||
context='Error while checking highlight group in theme (key {key})'.format(
|
context='Error while checking highlight group in theme (key {key})'.format(
|
||||||
key=context_key(context)),
|
key=context_key(context)),
|
||||||
context_mark=getattr(hl_group, 'mark', None),
|
context_mark=hl_group.mark,
|
||||||
problem='group {0} is using gradient {1} instead of a color'.format(hl_group, color),
|
problem='group {0} is using gradient {1} instead of a color'.format(hl_group, color),
|
||||||
problem_mark=color.mark
|
problem_mark=color.mark
|
||||||
)
|
)
|
||||||
@ -1090,7 +1119,7 @@ def hl_exists(hl_group, data, context, echoerr, allow_gradients=False):
|
|||||||
echoerr(
|
echoerr(
|
||||||
context='Error while checking highlight group in theme (key {key})'.format(
|
context='Error while checking highlight group in theme (key {key})'.format(
|
||||||
key=context_key(context)),
|
key=context_key(context)),
|
||||||
context_mark=getattr(hl_group, 'mark', None),
|
context_mark=hl_group.mark,
|
||||||
problem='group {0} should have at least one gradient color, but it has no'.format(hl_group),
|
problem='group {0} should have at least one gradient color, but it has no'.format(hl_group),
|
||||||
problem_mark=group_config.mark
|
problem_mark=group_config.mark
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user