Skip to content

Commit 28ec6f8

Browse files
committed
feat: add command line options
1 parent f0de226 commit 28ec6f8

File tree

3 files changed

+47
-4
lines changed

3 files changed

+47
-4
lines changed

fortls/interface.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,22 @@ def cli(name: str = "fortls") -> argparse.ArgumentParser:
280280
help="Enable experimental code actions (default: false)",
281281
)
282282

283+
# Folding Range options ----------------------------------------------------
284+
group = parser.add_argument_group("FoldingRange options")
285+
group.add_argument(
286+
"--folding-range-mode",
287+
choices=["indent", "syntax"],
288+
default="indent",
289+
help="How to detect folding ranges, by indent or syntax (default: indent)",
290+
)
291+
group.add_argument(
292+
"--folding-range-comment-lines",
293+
type=int,
294+
default=3,
295+
metavar="INTEGER",
296+
help="Number of comment lines to consider for folding (default: 3)",
297+
)
298+
283299
# Debug
284300
# By default debug arguments are hidden
285301
_debug_commandline_args(parser)

fortls/langserver.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1554,12 +1554,18 @@ def serve_folding_range(self, request: dict):
15541554
if file_obj is None:
15551555
return None
15561556

1557-
result = get_folding_ranges_by_block_comment(file_obj, min_block_size=3)
1558-
use_indent = True # If False, use syntax
1559-
if use_indent:
1557+
result = []
1558+
1559+
result += get_folding_ranges_by_block_comment(
1560+
file_obj,
1561+
min_block_size=self.folding_range_comment_lines,
1562+
)
1563+
1564+
if self.folding_range_mode == "indent":
15601565
result += get_folding_ranges_by_indent(file_obj)
1561-
else:
1566+
elif self.folding_range_mode == "syntax":
15621567
result += get_folding_ranges_by_syntax(file_obj)
1568+
15631569
return result
15641570

15651571
def _load_config_file(self) -> None:
@@ -1667,6 +1673,13 @@ def _load_config_file_general(self, config_dict: dict) -> None:
16671673
self.enable_code_actions = config_dict.get(
16681674
"enable_code_actions", self.enable_code_actions
16691675
)
1676+
# Folding Range Options ------------------------------------------------
1677+
self.folding_range_mode = config_dict.get(
1678+
"folding_range_mode", self.folding_range_mode
1679+
)
1680+
self.folding_range_comment_lines = config_dict.get(
1681+
"folding_range_comment_lines", self.folding_range_comment_lines
1682+
)
16701683

16711684
def _load_config_file_preproc(self, config_dict: dict) -> None:
16721685
self.pp_suffixes = config_dict.get("pp_suffixes", None)

test/test_interface.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,20 @@ def test_command_line_code_actions_options():
8383
assert args.enable_code_actions
8484

8585

86+
def test_command_line_folding_range_options():
87+
args = parser.parse_args(
88+
"--folding-range-mode syntax --folding-range-comment-lines 5".split()
89+
)
90+
assert args.folding_range_mode == "syntax"
91+
assert args.folding_range_comment_lines == 5
92+
93+
94+
def test_command_line_folding_range_options_default():
95+
args = parser.parse_args("".split())
96+
assert args.folding_range_mode == "indent"
97+
assert args.folding_range_comment_lines == 3
98+
99+
86100
def unittest_server_init(conn=None):
87101
from fortls.langserver import LangServer
88102

0 commit comments

Comments
 (0)