Coverage for lice2/constants.py: 100%

1"""Define constants for the LICE2 package."""

2

3 import re

4 from importlib import resources

5

6# To extend language formatting sopport with a new language, add an item in

7# LANGS dict:

8# "language_suffix":"comment_name"

9# where "language_suffix" is the suffix of your language and "comment_name" is

10# one of the comment types supported and listed in LANG_CMT:

11# text : no comment

12# c : /* * */

13# unix : #

14# lua : --- --

15

16# if you want add a new comment type just add an item to LANG_CMT:

17# "comment_name":['string', 'string', 'string']

18# where the first string open multiline comment, second string comment every

19# license's line and the last string close multiline comment,

20# associate your language and source file suffix with your new comment type

21# how explained above.

22# EXAMPLE:

23# LANG_CMT = {"c":['/*', '*', '*/']} # noqa: ERA001

24# LANGS = {"cpp":"c"} # noqa: ERA001

25# (for more examples see LANG_CMT and langs dicts below)

26

27 LANGS = {

28 "ada": "ada",

29 "adb": "ada",

30 "ads": "ada",

31 "agda": "haskell",

32 "bash": "unix",

33 "c": "c",

34 "cc": "c",

35 "clj": "lisp",

36 "cpp": "c",

37 "cs": "c",

38 "css": "c",

39 "dart": "c",

40 "el": "lisp",

41 "erl": "erlang",

42 "f": "fortran",

43 "f90": "fortran90",

44 "go": "c",

45 "h": "c",

46 "hpp": "c",

47 "hs": "haskell",

48 "html": "html",

49 "idr": "haskell",

50 "java": "java",

51 "js": "c",

52 "kt": "java",

53 "lisp": "lisp",

54 "lua": "lua",

55 "m": "c",

56 "md": "html",

57 "ml": "ml",

58 "php": "c",

59 "pl": "perl",

60 "ps": "powershell",

61 "py": "unix",

62 "rb": "ruby",

63 "r": "unix",

64 "rs": "rust",

65 "scala": "java",

66 "scm": "lisp",

67 "sh": "unix",

68 "sql": "c",

69 "swift": "c",

70 "toml": "unix",

71 "ts": "c",

72 "txt": "text",

73 "v": "c",

74 "vhdl": "ada",

75 "xml": "html",

76 "yaml": "unix",

77}

78

79 LANG_CMT = {

80 "ada": ["", "--", ""],

81 "c": ["/*", " *", " */"],

82 "erlang": ["%%", "%", "%%"],

83 "fortran": ["C", "C", "C"],

84 "fortran90": ["!*", "!*", "!*"],

85 "haskell": ["{-", "", "-}"],

86 "html": ["<!--", "", "-->"],

87 "java": ["/**", " *", " */"],

88 "lisp": ["", ";;", ""],

89 "lua": ["--[[", "", "--]]"],

90 "ml": ["(*", "", "*)"],

91 "perl": ["=item", "", "=cut"],

92 "powershell": ["<#", "#", "#>"],

93 "ruby": ["=begin", "", "=end"],

94 "rust": ["", "//", ""],

95 "text": ["", "", ""],

96 "unix": ["", "#", ""],

97}

98

99

100 def get_available_licenses() -> list[str]:

101 """Get a sorted list of available license names from template files.

102

103 Searches for templates in the current package's 'templates' directory

104 with pattern 'template-{name}.txt'.

105

106 Returns:

107 List of license names sorted alphabetically

108 """

109 # Get the current package name

110 package_name = __package__ if __package__ else __name__.split(".")[0]

111

112 template_path = resources.files(package_name).joinpath("templates")

113 licenses = []

114

115 for file in template_path.iterdir():

116 if file.is_file():

117 match = re.match(r"template-([a-z0-9_]+)\.txt", file.name)

118 if match:

119 licenses.append(match.groups()[0])

120

121 return sorted(licenses)

122

123

124 LICENSES = get_available_licenses()