3
3
import copy
4
4
import os
5
5
import re
6
- from typing import Dict , NamedTuple , List , Pattern
6
+ from typing import Dict , NamedTuple , List , Set , Pattern
7
7
from dataclasses import dataclass
8
8
9
9
from fortls .constants import (
56
56
)
57
57
USE_info = NamedTuple (
58
58
"USE_info" ,
59
- [("mod_name" , str ), ("only_list" , List [str ]), ("rename_map" , Dict [str , str ])],
59
+ [("mod_name" , str ), ("only_list" , Set [str ]), ("rename_map" , Dict [str , str ])],
60
60
)
61
61
GEN_info = NamedTuple (
62
62
"GEN_info" ,
@@ -79,9 +79,9 @@ def get_use_tree(
79
79
scope : fortran_scope ,
80
80
use_dict : dict ,
81
81
obj_tree : dict ,
82
- only_list : list = [] ,
83
- rename_map : dict = {} ,
84
- curr_path : list = [] ,
82
+ only_list : list = None ,
83
+ rename_map : dict = None ,
84
+ curr_path : list = None ,
85
85
):
86
86
def intersect_only (use_stmnt ):
87
87
tmp_list = []
@@ -97,6 +97,13 @@ def intersect_only(use_stmnt):
97
97
tmp_map .pop (val1 , None )
98
98
return tmp_list , tmp_map
99
99
100
+ if only_list is None :
101
+ only_list = []
102
+ if rename_map is None :
103
+ rename_map = {}
104
+ if curr_path is None :
105
+ curr_path = []
106
+
100
107
# Detect and break circular references
101
108
if scope .FQSN in curr_path :
102
109
return use_dict
@@ -297,15 +304,17 @@ def __init__(
297
304
self ,
298
305
mod_name : str ,
299
306
line_number : int ,
300
- only_list : list = [] ,
301
- rename_map : dict = {} ,
307
+ only_list : list = None ,
308
+ rename_map : dict = None ,
302
309
):
303
310
self .mod_name : str = mod_name .lower ()
304
311
self .line_number : int = line_number
305
- self .only_list : list = [only .lower () for only in only_list ]
306
- self .rename_map : dict = {
307
- key .lower (): value .lower () for key , value in rename_map .items ()
308
- }
312
+ if only_list is not None :
313
+ self .only_list : list = [only .lower () for only in only_list ]
314
+ if rename_map is not None :
315
+ self .rename_map : dict = {
316
+ key .lower (): value .lower () for key , value in rename_map .items ()
317
+ }
309
318
310
319
311
320
class fortran_diagnostic :
@@ -466,15 +475,19 @@ def req_named_end(self):
466
475
def check_valid_parent (self ):
467
476
return True
468
477
469
- def check_definition (self , obj_tree , known_types = {}, interface = False ):
478
+ def check_definition (self , obj_tree , known_types : dict = None , interface = False ):
479
+ if known_types is None :
480
+ known_types = {}
470
481
return None , known_types
471
482
472
483
473
484
class fortran_scope (fortran_obj ):
474
485
def __init__ (self , file_ast , line_number : int , name : str ):
475
486
self .base_setup (file_ast , line_number , name )
476
487
477
- def base_setup (self , file_ast , sline : int , name : str , keywords : list = []):
488
+ def base_setup (self , file_ast , sline : int , name : str , keywords : list = None ):
489
+ if keywords is None :
490
+ keywords = []
478
491
self .file_ast : fortran_ast = file_ast
479
492
self .sline : int = sline
480
493
self .eline : int = sline
@@ -514,7 +527,13 @@ def copy_from(self, copy_source):
514
527
self .implicit_vars = copy_source .implicit_vars
515
528
self .implicit_line = copy_source .implicit_line
516
529
517
- def add_use (self , use_mod , line_number , only_list = [], rename_map = {}):
530
+ def add_use (
531
+ self , use_mod , line_number , only_list : list = None , rename_map : dict = None
532
+ ):
533
+ if only_list is None :
534
+ only_list = []
535
+ if rename_map is None :
536
+ rename_map = {}
518
537
self .use .append (USE_line (use_mod , line_number , only_list , rename_map ))
519
538
520
539
def set_inherit (self , inherit_type ):
@@ -841,8 +860,10 @@ def __init__(
841
860
name : str ,
842
861
args : str = "" ,
843
862
mod_flag : bool = False ,
844
- keywords : list = [] ,
863
+ keywords : list = None ,
845
864
):
865
+ if keywords is None :
866
+ keywords = []
846
867
self .base_setup (file_ast , line_number , name , keywords = keywords )
847
868
self .args : str = args .replace (" " , "" )
848
869
self .args_snip : str = self .args
@@ -1055,10 +1076,12 @@ def __init__(
1055
1076
name : str ,
1056
1077
args : str = "" ,
1057
1078
mod_flag : bool = False ,
1058
- keywords : list = [] ,
1079
+ keywords : list = None ,
1059
1080
return_type = None ,
1060
1081
result_var = None ,
1061
1082
):
1083
+ if keywords is None :
1084
+ keywords = []
1062
1085
self .base_setup (file_ast , line_number , name , keywords = keywords )
1063
1086
self .args : str = args .replace (" " , "" ).lower ()
1064
1087
self .args_snip : str = self .args
@@ -1495,7 +1518,7 @@ class fortran_int(fortran_scope):
1495
1518
def __init__ (
1496
1519
self ,
1497
1520
file_ast : fortran_ast ,
1498
- line_number : list ,
1521
+ line_number : int ,
1499
1522
name : str ,
1500
1523
abstract : bool = False ,
1501
1524
):
@@ -1540,9 +1563,11 @@ def __init__(
1540
1563
name : str ,
1541
1564
var_desc : str ,
1542
1565
keywords : list ,
1543
- keyword_info : dict = {} ,
1566
+ keyword_info : dict = None ,
1544
1567
link_obj = None ,
1545
1568
):
1569
+ if keyword_info is None :
1570
+ keyword_info = {}
1546
1571
self .base_setup (
1547
1572
file_ast , line_number , name , var_desc , keywords , keyword_info , link_obj
1548
1573
)
@@ -1920,7 +1945,7 @@ def get_enc_scope_name(self):
1920
1945
def add_scope (
1921
1946
self ,
1922
1947
new_scope : fortran_scope ,
1923
- END_SCOPE_REGEX ,
1948
+ END_SCOPE_REGEX : Pattern [ str ] ,
1924
1949
exportable : bool = True ,
1925
1950
req_container : bool = False ,
1926
1951
):
0 commit comments