1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
from __future__ import annotations
import logging
from fortls.regex_patterns import FortranRegularExpressions
log = logging.getLogger(__name__)
# Global variables
sort_keywords = True
# Keyword identifiers
KEYWORD_LIST = [
"pointer",
"allocatable",
"optional",
"public",
"private",
"nopass",
"target",
"save",
"parameter",
"contiguous",
"deferred",
"dimension",
"intent",
"pass",
"pure",
"impure",
"elemental",
"recursive",
"abstract",
"external",
]
KEYWORD_ID_DICT = {keyword: ind for (ind, keyword) in enumerate(KEYWORD_LIST)}
# Type identifiers
BASE_TYPE_ID = -1
MODULE_TYPE_ID = 1
SUBROUTINE_TYPE_ID = 2
FUNCTION_TYPE_ID = 3
CLASS_TYPE_ID = 4
INTERFACE_TYPE_ID = 5
VAR_TYPE_ID = 6
METH_TYPE_ID = 7
SUBMODULE_TYPE_ID = 8
BLOCK_TYPE_ID = 9
SELECT_TYPE_ID = 10
DO_TYPE_ID = 11
WHERE_TYPE_ID = 12
IF_TYPE_ID = 13
ASSOC_TYPE_ID = 14
ENUM_TYPE_ID = 15
class Severity:
error = 1
warn = 2
info = 3
#: A string used to mark literals e.g. 10, 3.14, "words", etc.
#: The description name chosen is non-ambiguous and cannot naturally
#: occur in Fortran (with/out C preproc) code
#: It is invalid syntax to define a type starting with numerics
#: it cannot also be a comment that requires !, c, d
#: and ^= (xor_eq) operator is invalid in Fortran C++ preproc
FORTRAN_LITERAL = "0^=__LITERAL_INTERNAL_DUMMY_VAR_"
# Fortran Regular Expressions dataclass variable, immutable
FRegex = FortranRegularExpressions()
|