Skip to content

Commit 87d7202

Browse files
committed
Fixes references for semi-implicit function result
functions that do not use the word `result` but do define a variable that is the same as the function name previously failed to get refs A unittest has been added for this case
1 parent 8c2460b commit 87d7202

File tree

2 files changed

+28
-27
lines changed

2 files changed

+28
-27
lines changed

fortls/langserver.py

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -907,34 +907,31 @@ def get_all_references(self, def_obj, type_mem, file_obj=None):
907907
continue
908908
for match in NAME_REGEX.finditer(line):
909909
var_def = self.get_definition(file_obj, i, match.start(1) + 1)
910-
if var_def is not None:
911-
ref_match = False
912-
if (def_fqsn == var_def.FQSN) or (
913-
var_def.FQSN in override_cache
910+
if var_def is None:
911+
continue
912+
ref_match = False
913+
if def_fqsn == var_def.FQSN or var_def.FQSN in override_cache:
914+
ref_match = True
915+
elif var_def.parent and var_def.parent.get_type() == CLASS_TYPE_ID:
916+
if type_mem:
917+
for inherit_def in var_def.parent.get_overridden(def_name):
918+
if def_fqsn == inherit_def.FQSN:
919+
ref_match = True
920+
override_cache.append(var_def.FQSN)
921+
break
922+
if (
923+
(var_def.sline - 1 == i)
924+
and (var_def.file_ast.path == filename)
925+
and (line.count("=>") == 0)
914926
):
915-
ref_match = True
916-
elif var_def.parent.get_type() == CLASS_TYPE_ID:
917-
if type_mem:
918-
for inherit_def in var_def.parent.get_overridden(
919-
def_name
920-
):
921-
if def_fqsn == inherit_def.FQSN:
922-
ref_match = True
923-
override_cache.append(var_def.FQSN)
924-
break
925-
if (
926-
(var_def.sline - 1 == i)
927-
and (var_def.file_ast.path == filename)
928-
and (line.count("=>") == 0)
929-
):
930-
try:
931-
if var_def.link_obj is def_obj:
932-
ref_objs.append(var_def)
933-
ref_match = True
934-
except:
935-
pass
936-
if ref_match:
937-
file_refs.append([i, match.start(1), match.end(1)])
927+
try:
928+
if var_def.link_obj is def_obj:
929+
ref_objs.append(var_def)
930+
ref_match = True
931+
except:
932+
pass
933+
if ref_match:
934+
file_refs.append([i, match.start(1), match.end(1)])
938935
if len(file_refs) > 0:
939936
refs[filename] = file_refs
940937
return refs, ref_objs

test/test_server.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,8 @@ def def_request(file_path, line, char):
463463
file_path = test_dir / "subdir" / "test_rename.F90"
464464
string += def_request(file_path, 13, 5)
465465
string += def_request(file_path, 14, 5)
466+
file_path = test_dir / "hover" / "functions.f90"
467+
string += def_request(file_path, 3, 17)
466468
errcode, results = run_request(string)
467469
assert errcode == 0
468470
#
@@ -488,6 +490,8 @@ def def_request(file_path, line, char):
488490
# subdir/test_rename.F90
489491
[6, 6, str(test_dir / "subdir" / "test_rename.F90")],
490492
[1, 1, str(test_dir / "subdir" / "test_rename.F90")],
493+
# hover/functions.f90
494+
[3, 3, str(test_dir / "hover" / "functions.f90")],
491495
)
492496
assert len(exp_results) + 1 == len(results)
493497
for i in range(len(exp_results)):

0 commit comments

Comments
 (0)