From 6debd0e4b005e033cfb26dd3327a19f52ea0e0a0 Mon Sep 17 00:00:00 2001 From: Sergey M Date: Sun, 11 Jun 2023 11:08:49 +0200 Subject: [PATCH] Issue #284 fix and extend hover of parameters. Add division sign, allow spaces in values of parameters. Extend unittests with patameters variables --- fortls/regex_patterns.py | 2 +- test/test_server_hover.py | 67 +++++++++++++++++++++++++++ test/test_source/hover/parameters.f90 | 6 +++ 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/fortls/regex_patterns.py b/fortls/regex_patterns.py index d6611f30..80a793e6 100644 --- a/fortls/regex_patterns.py +++ b/fortls/regex_patterns.py @@ -93,7 +93,7 @@ class FortranRegularExpressions: r"CONTIGUOUS)", I, ) - PARAMETER_VAL: Pattern = compile(r"\w*[\s\&]*=[\s\&]*([\w\.\*\-\+\\\'\"]*)", I) + PARAMETER_VAL: Pattern = compile(r"\w*[\s\&]*=(([\s\&]*[\w\.\-\+\*\/\'\"])*)", I) TATTR_LIST: Pattern = compile( r"[ ]*,[ ]*(PUBLIC|PRIVATE|ABSTRACT|EXTENDS\(\w*\))", I ) diff --git a/test/test_server_hover.py b/test/test_server_hover.py index f1a79147..c2cf57bc 100644 --- a/test/test_server_hover.py +++ b/test/test_server_hover.py @@ -70,6 +70,73 @@ def test_hover_parameter(): validate_hover(results, ref_results) +def test_hover_parameter_eqnospace(): + """Test that hover parameters display value correctly""" + string = write_rpc_request(1, "initialize", {"rootPath": str(test_dir)}) + file_path = test_dir / "hover" / "parameters.f90" + string += hover_req(file_path, 11, 28) + errcode, results = run_request(string, fortls_args=["--sort_keywords"]) + assert errcode == 0 + ref_results = ["```fortran90\nINTEGER, PARAMETER :: var_no_space = 123\n```"] + validate_hover(results, ref_results) + + +def test_hover_parameter_morespace(): + """Test that hover parameters display value correctly""" + string = write_rpc_request(1, "initialize", {"rootPath": str(test_dir)}) + file_path = test_dir / "hover" / "parameters.f90" + string += hover_req(file_path, 12, 28) + errcode, results = run_request(string, fortls_args=["--sort_keywords"]) + assert errcode == 0 + ref_results = ["```fortran90\nINTEGER, PARAMETER :: var_more_space = 123\n```"] + validate_hover(results, ref_results) + + +def test_hover_parameter_var_sum(): + """Test that hover parameters display value correctly with sum""" + string = write_rpc_request(1, "initialize", {"rootPath": str(test_dir)}) + file_path = test_dir / "hover" / "parameters.f90" + string += hover_req(file_path, 13, 28) + errcode, results = run_request(string, fortls_args=["--sort_keywords"]) + assert errcode == 0 + ref_results = ["```fortran90\nINTEGER, PARAMETER :: var_sum1 = 1 + 23\n```"] + validate_hover(results, ref_results) + + +def test_hover_parameter_var_neg(): + """Test that hover parameters display value correctly with extraction""" + string = write_rpc_request(1, "initialize", {"rootPath": str(test_dir)}) + file_path = test_dir / "hover" / "parameters.f90" + string += hover_req(file_path, 14, 28) + errcode, results = run_request(string, fortls_args=["--sort_keywords"]) + assert errcode == 0 + ref_results = ["```fortran90\nINTEGER, PARAMETER :: var_ex1 = 1 - 23\n```"] + validate_hover(results, ref_results) + + +def test_hover_parameter_var_mul(): + """Test that hover parameters display value correctly with + multiplication and spaces""" + string = write_rpc_request(1, "initialize", {"rootPath": str(test_dir)}) + file_path = test_dir / "hover" / "parameters.f90" + string += hover_req(file_path, 15, 28) + errcode, results = run_request(string, fortls_args=["--sort_keywords"]) + assert errcode == 0 + ref_results = ["```fortran90\nINTEGER, PARAMETER :: var_mul1 = 1 * 23\n```"] + validate_hover(results, ref_results) + + +def test_hover_parameter_var_div(): + """Test that hover parameters display value correctly with value of division""" + string = write_rpc_request(1, "initialize", {"rootPath": str(test_dir)}) + file_path = test_dir / "hover" / "parameters.f90" + string += hover_req(file_path, 16, 28) + errcode, results = run_request(string, fortls_args=["--sort_keywords"]) + assert errcode == 0 + ref_results = ["```fortran90\nINTEGER, PARAMETER :: var_div1 = 1/1\n```"] + validate_hover(results, ref_results) + + def test_hover_parameter_nested(): """Test that hover parameters using other parameter values works""" string = write_rpc_request(1, "initialize", {"rootPath": str(test_dir)}) diff --git a/test/test_source/hover/parameters.f90 b/test/test_source/hover/parameters.f90 index e60f5cbc..89eff60d 100644 --- a/test/test_source/hover/parameters.f90 +++ b/test/test_source/hover/parameters.f90 @@ -9,4 +9,10 @@ program params logical(kind=8), parameter :: long_bool = .true. character(len=5), parameter :: sq_str = '12345' character(len=5), parameter :: dq_str = "12345" + integer, parameter :: var_no_space=123 + integer, parameter :: var_more_space = 123 + integer, parameter :: var_sum1 = 1 + 23 + integer, parameter :: var_ex1 = 1 - 23 + integer, parameter :: var_mul1 = 1 * 23 + integer, parameter :: var_div1 = 1/1 end program params