From c3dfd30bc7f668d9a2d3d35dfcfba6ac71e2750e Mon Sep 17 00:00:00 2001 From: Charles Cooper Date: Wed, 12 Jan 2022 11:57:50 -0400 Subject: [PATCH 1/4] fix: ir and metadata outputs for vyper-json --- vyper/cli/vyper_json.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/vyper/cli/vyper_json.py b/vyper/cli/vyper_json.py index 3db0c1bcb5..7a6d9f7368 100755 --- a/vyper/cli/vyper_json.py +++ b/vyper/cli/vyper_json.py @@ -25,7 +25,9 @@ "evm.deployedBytecode.opcodes": "opcodes_runtime", "evm.deployedBytecode.sourceMap": "source_map", "interface": "interface", - "ir": "ir", + "ir": "ir_dict", + "ir_json": "ir_dict", + "metadata": "metadata", "layout": "layout", "userdoc": "userdoc", } @@ -349,7 +351,10 @@ def format_to_output_dict(compiler_data: Dict) -> Dict: output_dict["contracts"][path] = {name: {}} output_contracts = output_dict["contracts"][path][name] - for key in ("abi", "devdoc", "interface", "ir", "userdoc"): + if "ir_dict" in data: + output_contracts["ir"] = data["ir_dict"] + + for key in ("abi", "devdoc", "interface", "metadata", "userdoc"): if key in data: output_contracts[key] = data[key] @@ -357,14 +362,14 @@ def format_to_output_dict(compiler_data: Dict) -> Dict: output_contracts["evm"] = {"methodIdentifiers": data["method_identifiers"]} evm_keys = ("bytecode", "opcodes") - if next((i for i in evm_keys if i in data), False): + if any(i in data for i in evm_keys): evm = output_contracts.setdefault("evm", {}).setdefault("bytecode", {}) if "bytecode" in data: evm["object"] = data["bytecode"] if "opcodes" in data: evm["opcodes"] = data["opcodes"] - if next((i for i in evm_keys if i + "_runtime" in data), False) or "source_map" in data: + if any(i + "_runtime" in data for i in evm_keys) or "source_map" in data: evm = output_contracts.setdefault("evm", {}).setdefault("deployedBytecode", {}) if "bytecode_runtime" in data: evm["object"] = data["bytecode_runtime"] From 9b286eb8457f2c711e3b79a5fdc3c79b659c521f Mon Sep 17 00:00:00 2001 From: Charles Cooper Date: Wed, 12 Jan 2022 16:07:50 +0000 Subject: [PATCH 2/4] fix vyper-json test --- tests/cli/vyper_json/test_parse_args_vyperjson.py | 12 +++++++++--- vyper/compiler/__init__.py | 8 +++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/tests/cli/vyper_json/test_parse_args_vyperjson.py b/tests/cli/vyper_json/test_parse_args_vyperjson.py index 1f83870014..08da5f1888 100644 --- a/tests/cli/vyper_json/test_parse_args_vyperjson.py +++ b/tests/cli/vyper_json/test_parse_args_vyperjson.py @@ -44,6 +44,12 @@ def bar(a: uint256) -> bool: } +def _no_errors(output_json): + return "errors" not in output_json or not any( + err["severity"] == "error" for err in output_json["errors"] + ) + + def test_to_stdout(tmp_path, capfd): path = tmp_path.joinpath("input.json") with path.open("w") as fp: @@ -51,7 +57,7 @@ def test_to_stdout(tmp_path, capfd): _parse_args([path.absolute().as_posix()]) out, _ = capfd.readouterr() output_json = json.loads(out) - assert "errors" not in output_json + assert _no_errors(output_json) assert "contracts/foo.vy" in output_json["sources"] assert "contracts/bar.vy" in output_json["sources"] @@ -65,7 +71,7 @@ def test_to_file(tmp_path): assert output_path.exists() with output_path.open() as fp: output_json = json.load(fp) - assert "errors" not in output_json + assert _no_errors(output_json) assert "contracts/foo.vy" in output_json["sources"] assert "contracts/bar.vy" in output_json["sources"] @@ -91,6 +97,6 @@ def test_traceback(tmp_path, capfd): _parse_args([path.absolute().as_posix()]) out, _ = capfd.readouterr() output_json = json.loads(out) - assert "errors" in output_json + assert not _no_errors(output_json) with pytest.raises(JSONError): _parse_args([path.absolute().as_posix(), "--traceback"]) diff --git a/vyper/compiler/__init__.py b/vyper/compiler/__init__.py index fc25ff4ef6..c754c1d1b1 100644 --- a/vyper/compiler/__init__.py +++ b/vyper/compiler/__init__.py @@ -111,7 +111,13 @@ def compile_codes( interfaces = interfaces[contract_name] compiler_data = CompilerData( - source_code, contract_name, interfaces, source_id, no_optimize, storage_layout_override, show_gas_estimates + source_code, + contract_name, + interfaces, + source_id, + no_optimize, + storage_layout_override, + show_gas_estimates, ) for output_format in output_formats[contract_name]: if output_format not in OUTPUT_FORMATS: From 55e25841242da36ac630b95b034af05e7ff78805 Mon Sep 17 00:00:00 2001 From: Charles Cooper Date: Wed, 12 Jan 2022 18:10:58 +0000 Subject: [PATCH 3/4] fix vyper-json tests --- tests/cli/vyper_json/test_compile_from_input_dict.py | 2 +- tests/cli/vyper_json/test_output_dict.py | 3 ++- tests/cli/vyper_json/test_output_selection.py | 4 ++-- vyper/cli/vyper_json.py | 8 +++++--- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/tests/cli/vyper_json/test_compile_from_input_dict.py b/tests/cli/vyper_json/test_compile_from_input_dict.py index 0e3ba7df62..a5a31a522b 100644 --- a/tests/cli/vyper_json/test_compile_from_input_dict.py +++ b/tests/cli/vyper_json/test_compile_from_input_dict.py @@ -121,7 +121,7 @@ def test_source_ids_increment(): def test_outputs(): result, _ = compile_from_input_dict(INPUT_JSON) assert sorted(result.keys()) == ["contracts/bar.vy", "contracts/foo.vy"] - assert sorted(result["contracts/bar.vy"].keys()) == sorted(TRANSLATE_MAP.values()) + assert sorted(result["contracts/bar.vy"].keys()) == sorted(set(TRANSLATE_MAP.values())) def test_relative_import_paths(): diff --git a/tests/cli/vyper_json/test_output_dict.py b/tests/cli/vyper_json/test_output_dict.py index 57399e5589..551633b0de 100644 --- a/tests/cli/vyper_json/test_output_dict.py +++ b/tests/cli/vyper_json/test_output_dict.py @@ -22,8 +22,9 @@ def test_keys(): "abi": data["abi"], "devdoc": data["devdoc"], "interface": data["interface"], - "ir": data["ir"], + "ir": data["ir_dict"], "userdoc": data["userdoc"], + "metadata": data["metadata"], "evm": { "bytecode": {"object": data["bytecode"], "opcodes": data["opcodes"]}, "deployedBytecode": { diff --git a/tests/cli/vyper_json/test_output_selection.py b/tests/cli/vyper_json/test_output_selection.py index 4f62ff7cfd..c72f06f5a7 100644 --- a/tests/cli/vyper_json/test_output_selection.py +++ b/tests/cli/vyper_json/test_output_selection.py @@ -35,7 +35,7 @@ def test_translate_map(output): def test_star(): input_json = {"settings": {"outputSelection": {"*": ["*"]}}} sources = {"foo.vy": "", "bar.vy": ""} - expected = sorted(TRANSLATE_MAP.values()) + expected = sorted(set(TRANSLATE_MAP.values())) result = get_input_dict_output_formats(input_json, sources) assert result == {"foo.vy": expected, "bar.vy": expected} @@ -51,4 +51,4 @@ def test_evm(): def test_solc_style(): input_json = {"settings": {"outputSelection": {"foo.vy": {"": ["abi"], "foo.vy": ["ir"]}}}} sources = {"foo.vy": ""} - assert get_input_dict_output_formats(input_json, sources) == {"foo.vy": ["abi", "ir"]} + assert get_input_dict_output_formats(input_json, sources) == {"foo.vy": ["abi", "ir_dict"]} diff --git a/vyper/cli/vyper_json.py b/vyper/cli/vyper_json.py index 7a6d9f7368..41f90819b9 100755 --- a/vyper/cli/vyper_json.py +++ b/vyper/cli/vyper_json.py @@ -27,7 +27,7 @@ "interface": "interface", "ir": "ir_dict", "ir_json": "ir_dict", - "metadata": "metadata", + #"metadata": "metadata", # don't include in "*" output for now "layout": "layout", "userdoc": "userdoc", } @@ -214,13 +214,15 @@ def get_input_dict_output_formats(input_dict: Dict, contract_sources: ContractCo outputs.remove(key) outputs.update([i for i in TRANSLATE_MAP if i.startswith(key)]) if "*" in outputs: - outputs = sorted(TRANSLATE_MAP.values()) + outputs = TRANSLATE_MAP.values() else: try: - outputs = sorted(TRANSLATE_MAP[i] for i in outputs) + outputs = [TRANSLATE_MAP[i] for i in outputs] except KeyError as e: raise JSONError(f"Invalid outputSelection - {e}") + outputs = sorted(set(outputs)) + if path == "*": output_keys = list(contract_sources.keys()) else: From 3b7633ad8ede49c0e95653d81bebc2beacd2abdd Mon Sep 17 00:00:00 2001 From: Charles Cooper Date: Wed, 12 Jan 2022 18:13:38 +0000 Subject: [PATCH 4/4] fix lint --- vyper/cli/vyper_json.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vyper/cli/vyper_json.py b/vyper/cli/vyper_json.py index 41f90819b9..cbb70d886d 100755 --- a/vyper/cli/vyper_json.py +++ b/vyper/cli/vyper_json.py @@ -27,7 +27,7 @@ "interface": "interface", "ir": "ir_dict", "ir_json": "ir_dict", - #"metadata": "metadata", # don't include in "*" output for now + # "metadata": "metadata", # don't include in "*" output for now "layout": "layout", "userdoc": "userdoc", }