Use location formatting in mlog.warning() for invalid kwarg warning

This already reports the location (in a slightly different format), but
using mlog.warning() will make it easier if we want to change the location
format in future.
pull/2856/head
Jon Turney 7 years ago
parent f85fde743a
commit bcc95d7dd7
  1. 18
      mesonbuild/interpreterbase.py
  2. 1
      run_unittests.py
  3. 2
      test cases/unit/20 warning location/meson.build

@ -18,7 +18,7 @@
from . import mparser, mesonlib, mlog
from . import environment, dependencies
import os, copy, re
import os, copy, re, types
from functools import wraps
# Decorators for method calls.
@ -63,17 +63,19 @@ class permittedKwargs:
def __call__(self, f):
@wraps(f)
def wrapped(s, node_or_state, args, kwargs):
loc = types.SimpleNamespace()
if hasattr(s, 'subdir'):
subdir = s.subdir
lineno = s.current_lineno
loc.subdir = s.subdir
loc.lineno = s.current_lineno
elif hasattr(node_or_state, 'subdir'):
subdir = node_or_state.subdir
lineno = node_or_state.current_lineno
loc.subdir = node_or_state.subdir
loc.lineno = node_or_state.current_lineno
else:
loc = None
for k in kwargs:
if k not in self.permitted:
fname = os.path.join(subdir, environment.build_filename)
mlog.warning('''Passed invalid keyword argument "%s" in %s line %d.
This will become a hard error in the future.''' % (k, fname, lineno))
mlog.warning('''Passed invalid keyword argument "{}"'''.format(k), location=loc)
mlog.warning('This will become a hard error in the future.')
return f(s, node_or_state, args, kwargs)
return wrapped

@ -1717,6 +1717,7 @@ int main(int argc, char **argv) {
r'WARNING: subdir warning in file sub' + os.path.sep + r'meson.build, line 4',
r'WARNING: Module unstable-simd has no backwards or forwards compatibility and might not exist in future releases in file meson.build, line 7',
r"WARNING: The variable(s) 'MISSING' in the input file conf.in are not present in the given configuration data in file meson.build, line 10",
r'WARNING: Passed invalid keyword argument "invalid" in file meson.build, line 1'
]:
self.assertRegex(out, re.escape(expected))

@ -1,4 +1,4 @@
project('warning location', 'c')
project('warning location', 'c', invalid: 'cheese')
a = library('liba', 'a.c')
b = library('libb', 'b.c')
executable('main', 'main.c', link_with: a, link_with: b)

Loading…
Cancel
Save