From 2974f2bcb836fc8ff7eafaa1a1d371efbc025c0f Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Wed, 16 Feb 2022 19:26:45 -0500 Subject: fix malformed warning to print the way it was meant to print Given a meson.build with the contents: ``` t = ' ' ``` We want to warn that this is bad. So we emitted this warning: ``` WARNING: Newline character in a string detected, use ''' (three single quotes) for multiline strings instead. This will become a hard error in a future Meson release. t = ' 4 4 ``` The line contents and the offset are printed as gibberish after a big whitespace run. These are elsewhere often passed to ParseException, which pretty-prints this, but newlines aren't an exception, merely a warning, and mlog.warning doesn't accept numeric strings as anything more meaningful than something to print as text. Fix this (by wrapping it in a ParseException) to properly print: ``` meson.build:4: WARNING: Newline character in a string detected, use ''' (three single quotes) for multiline strings instead. This will become a hard error in a future Meson release. t = ' ^ ``` --- mesonbuild/mparser.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'mesonbuild/mparser.py') diff --git a/mesonbuild/mparser.py b/mesonbuild/mparser.py index 85b649a..97a87d8 100644 --- a/mesonbuild/mparser.py +++ b/mesonbuild/mparser.py @@ -15,7 +15,6 @@ from dataclasses import dataclass import re import codecs -import textwrap import types import typing as T from .mesonlib import MesonException @@ -194,14 +193,11 @@ class Lexer: elif tid in {'string', 'fstring'}: # Handle here and not on the regexp to give a better error message. if match_text.find("\n") != -1: - mlog.warning(textwrap.dedent("""\ - Newline character in a string detected, use ''' (three single quotes) for multiline strings instead. - This will become a hard error in a future Meson release. - """), - self.getline(line_start), - str(lineno), - str(col) - ) + msg = ParseException("Newline character in a string detected, use ''' (three single quotes) " + "for multiline strings instead.\n" + "This will become a hard error in a future Meson release.", + self.getline(line_start), lineno, col) + mlog.warning(msg, location=BaseNode(lineno, col, filename)) value = match_text[2 if tid == 'fstring' else 1:-1] try: value = ESCAPE_SEQUENCE_SINGLE_RE.sub(decode_match, value) -- cgit v1.1