From 6b1adc668727ebfbd84763b14b65676cc11febec Mon Sep 17 00:00:00 2001 From: Claudiu Popa Date: Thu, 28 Feb 2019 17:18:00 +0100 Subject: [PATCH] Pass `quote=False` to `html.escape` in the JSON reporter Close PyCQA/pylint#2769 --- pylint/reporters/json.py | 3 +-- pylint/test/regrtest_data/unused_variable.py | 6 ++++++ pylint/test/test_self.py | 22 ++++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 pylint/test/regrtest_data/unused_variable.py diff --git a/pylint/reporters/json.py b/pylint/reporters/json.py index 100ed5264..18d46bd8f 100644 --- a/pylint/reporters/json.py +++ b/pylint/reporters/json.py @@ -39,8 +39,7 @@ class JSONReporter(BaseReporter): "column": msg.column, "path": msg.path, "symbol": msg.symbol, - # pylint: disable=deprecated-method; deprecated since 3.2. - "message": html.escape(msg.msg or ""), + "message": html.escape(msg.msg or "", quote=False), "message-id": msg.msg_id, } ) diff --git a/pylint/test/regrtest_data/unused_variable.py b/pylint/test/regrtest_data/unused_variable.py new file mode 100644 index 000000000..eee909d53 --- /dev/null +++ b/pylint/test/regrtest_data/unused_variable.py @@ -0,0 +1,6 @@ +# pylint: disable=missing-docstring + +def test(): + variable = '' + variable2 = None + return variable2 diff --git a/pylint/test/test_self.py b/pylint/test/test_self.py index 2c3907e05..d03566eeb 100644 --- a/pylint/test/test_self.py +++ b/pylint/test/test_self.py @@ -433,6 +433,28 @@ class TestRunTC(object): assert message[key] == value assert message["message"].startswith("No module named") + def test_json_report_does_not_escape_quotes(self): + out = StringIO() + module = join(HERE, "regrtest_data", "unused_variable.py") + self._runtest([module], code=4, reporter=JSONReporter(out)) + output = json.loads(out.getvalue()) + assert isinstance(output, list) + assert len(output) == 1 + assert isinstance(output[0], dict) + expected = { + "symbol": "unused-variable", + "module": "unused_variable", + "column": 4, + "message": "Unused variable 'variable'", + "message-id": "W0612", + "line": 4, + "type": "warning", + } + message = output[0] + for key, value in expected.items(): + assert key in message + assert message[key] == value + def test_information_category_disabled_by_default(self): expected = "Your code has been rated at 10.00/10" path = join(HERE, "regrtest_data", "meta.py")