Skip to content

Commit 9040c8f

Browse files
committed
Changes to use dataclasses instead of namedtuples
1 parent 57b28a4 commit 9040c8f

File tree

3 files changed

+89
-62
lines changed

3 files changed

+89
-62
lines changed

fortls/constants.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,75 @@
6565
FORTRAN_LITERAL = "0^=__LITERAL_INTERNAL_DUMMY_VAR_"
6666

6767

68+
@dataclass
69+
class VAR_info:
70+
type_word: str
71+
keywords: list[str]
72+
var_names: list[str]
73+
74+
75+
@dataclass
76+
class SUB_info:
77+
name: str
78+
args: str
79+
mod_flag: bool
80+
keywords: list[str]
81+
82+
83+
@dataclass
84+
class SELECT_info:
85+
type: int
86+
binding: str
87+
desc: str
88+
89+
90+
@dataclass
91+
class CLASS_info:
92+
name: str
93+
parent: str
94+
keywords: str
95+
96+
97+
@dataclass
98+
class USE_info:
99+
mod_name: str
100+
only_list: set[str]
101+
rename_map: dict[str, str]
102+
103+
104+
@dataclass
105+
class GEN_info:
106+
bound_name: str
107+
pro_links: list[str]
108+
vis_flag: int
109+
110+
111+
@dataclass
112+
class SMOD_info:
113+
name: str
114+
parent: str
115+
116+
117+
@dataclass
118+
class INT_info:
119+
name: str
120+
abstract: bool
121+
122+
123+
@dataclass
124+
class VIS_info:
125+
type: int
126+
obj_names: list[str]
127+
128+
129+
@dataclass
130+
class INCLUDE_info:
131+
line_number: int
132+
path: str
133+
file: None # fortran_file
134+
scope_objs: list[str]
135+
136+
68137
@dataclass
69138
class RESULT_sig:
70139
name: str = field(default=None)
@@ -85,4 +154,5 @@ def __post_init__(self):
85154
self.result.name = self.name
86155

87156

157+
# Fortran Regular Expressions dataclass variable, immutable
88158
FRegex = FortranRegularExpressions()

fortls/objects.py

Lines changed: 10 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import copy
44
import os
55
import re
6-
from dataclasses import dataclass
7-
from typing import Dict, List, NamedTuple, Pattern, Set
6+
from dataclasses import replace
7+
from typing import Pattern
88

99
from fortls.constants import (
1010
ASSOC_TYPE_ID,
@@ -25,63 +25,20 @@
2525
VAR_TYPE_ID,
2626
WHERE_TYPE_ID,
2727
FRegex,
28+
USE_info,
29+
INCLUDE_info,
2830
)
2931
from fortls.helper_functions import get_keywords, get_paren_substring, get_var_stack
3032
from fortls.jsonrpc import path_to_uri
3133

32-
# Helper types
33-
VAR_info = NamedTuple(
34-
"VAR_info", [("type_word", str), ("keywords", List[str]), ("var_names", List[str])]
35-
)
36-
SUB_info = NamedTuple(
37-
"SUB_info",
38-
[("name", str), ("args", str), ("mod_flag", bool), ("keywords", List[str])],
39-
)
40-
FUN_info = NamedTuple(
41-
"FUN_info",
42-
[
43-
("name", str),
44-
("args", str),
45-
("return_type", None),
46-
("return_var", str),
47-
("mod_flag", bool),
48-
("keywords", List[str]),
49-
],
50-
)
51-
SELECT_info = NamedTuple(
52-
"SELECT_info", [("type", int), ("binding", str), ("desc", str)]
53-
)
54-
CLASS_info = NamedTuple(
55-
"CLASS_info", [("name", str), ("parent", str), ("keywords", List[str])]
56-
)
57-
USE_info = NamedTuple(
58-
"USE_info",
59-
[("mod_name", str), ("only_list", Set[str]), ("rename_map", Dict[str, str])],
60-
)
61-
GEN_info = NamedTuple(
62-
"GEN_info",
63-
[("bound_name", str), ("pro_links", List[str]), ("vis_flag", int)],
64-
)
65-
SMOD_info = NamedTuple("SMOD_info", [("name", str), ("parent", str)])
66-
INT_info = NamedTuple("INT_info", [("name", str), ("abstract", bool)])
67-
VIS_info = NamedTuple("VIS_info", [("type", int), ("obj_names", List[str])])
68-
69-
70-
@dataclass
71-
class INCLUDE_info:
72-
line_number: int
73-
path: str
74-
file: None # fortran_file
75-
scope_objs: list[str]
76-
7734

7835
def get_use_tree(
7936
scope: fortran_scope,
80-
use_dict: dict,
37+
use_dict: dict[str, USE_info],
8138
obj_tree: dict,
82-
only_list: list = None,
83-
rename_map: dict = None,
84-
curr_path: list = None,
39+
only_list: list[str] = None,
40+
rename_map: dict[str, str] = None,
41+
curr_path: list[str] = None,
8542
):
8643
def intersect_only(use_stmnt):
8744
tmp_list = []
@@ -135,8 +92,8 @@ def intersect_only(use_stmnt):
13592
only_len = len(use_dict_mod.only_list)
13693
new_rename = merged_rename.get(only_name, None)
13794
if new_rename is not None:
138-
use_dict[use_stmnt.mod_name] = use_dict_mod._replace(
139-
rename_map=merged_rename
95+
use_dict[use_stmnt.mod_name] = replace(
96+
use_dict_mod, rename_map=merged_rename
14097
)
14198
else:
14299
use_dict[use_stmnt.mod_name] = USE_info(use_stmnt.mod_name, set(), {})

fortls/parse_fortran.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@
2121
FRegex,
2222
FUN_sig,
2323
RESULT_sig,
24+
CLASS_info,
25+
GEN_info,
26+
INT_info,
27+
SELECT_info,
28+
SMOD_info,
29+
SUB_info,
30+
USE_info,
31+
VAR_info,
32+
VIS_info,
2433
log,
2534
)
2635
from fortls.helper_functions import (
@@ -35,15 +44,6 @@
3544
strip_strings,
3645
)
3746
from fortls.objects import (
38-
CLASS_info,
39-
GEN_info,
40-
INT_info,
41-
SELECT_info,
42-
SMOD_info,
43-
SUB_info,
44-
USE_info,
45-
VAR_info,
46-
VIS_info,
4747
fortran_associate,
4848
fortran_ast,
4949
fortran_block,

0 commit comments

Comments
 (0)