@@ -578,7 +578,9 @@ async def create_testcase_settings_completion_items(self, range: Optional[Range]
578
578
for setting in settings
579
579
]
580
580
581
- async def create_bdd_prefix_completion_items (self , range : Optional [Range ]) -> List [CompletionItem ]:
581
+ async def create_bdd_prefix_completion_items (
582
+ self , range : Optional [Range ], at_top : bool = False , with_space : bool = True
583
+ ) -> List [CompletionItem ]:
582
584
prefixes = {"Given" , "When" , "Then" , "And" , "But" }
583
585
584
586
if self .namespace .languages is not None :
@@ -589,9 +591,11 @@ async def create_bdd_prefix_completion_items(self, range: Optional[Range]) -> Li
589
591
label = prefix ,
590
592
kind = CompletionItemKind .UNIT ,
591
593
detail = "BDD Prefix" ,
592
- sort_text = f"080_{ prefix } " ,
594
+ sort_text = f"000_ { prefix } " if at_top else f" 080_{ prefix } " ,
593
595
insert_text_format = InsertTextFormat .PLAIN_TEXT ,
594
- text_edit = TextEdit (range = range , new_text = f"{ prefix } " ) if range is not None else None ,
596
+ text_edit = TextEdit (range = range , new_text = prefix + (" " if with_space else "" ))
597
+ if range is not None
598
+ else None ,
595
599
)
596
600
for prefix in prefixes
597
601
]
@@ -674,18 +678,29 @@ async def create_keyword_completion_items(
674
678
675
679
has_bdd = False
676
680
bdd_token = None
681
+ only_bdd = False
677
682
678
683
if token is not None :
679
684
old_token = token
680
685
bdd_token , token = self .split_bdd_prefix (self .namespace , token )
681
686
687
+ if (
688
+ bdd_token is None
689
+ and token is not None
690
+ and self .is_bdd_token (self .namespace , token )
691
+ and position .character > range_from_token (token ).end .character
692
+ ):
693
+ bdd_token = token
694
+ token = None
695
+ only_bdd = True
696
+
682
697
if token is not None and token .value == "" :
683
698
token = None
684
699
685
700
if bdd_token is not None and position .character > range_from_token (bdd_token ).end .character :
686
701
has_bdd = True
687
702
688
- if not has_bdd and token is None :
703
+ if not has_bdd and token is not None :
689
704
token = old_token
690
705
691
706
if token is not None :
@@ -877,12 +892,20 @@ def enumerate_indexes(s: str, c: str) -> Iterator[int]:
877
892
)
878
893
)
879
894
880
- if add_bdd_prefixes and not has_bdd :
881
- result += await self .create_bdd_prefix_completion_items (
882
- range_from_token (token ) if token is not None else None
883
- )
895
+ if add_bdd_prefixes and not (has_bdd or only_bdd ):
896
+ bdd_range = r
897
+ at_top = False
898
+ with_space = True
899
+ if bdd_token is not None and (
900
+ position in range_from_token (bdd_token ) or position == range_from_token (bdd_token ).end .character
901
+ ):
902
+ at_top = True
903
+ with_space = False
904
+ bdd_range = range_from_token (bdd_token )
905
+
906
+ result += await self .create_bdd_prefix_completion_items (bdd_range , at_top , with_space )
884
907
885
- if add_reserverd :
908
+ if add_reserverd and not ( has_bdd or only_bdd ) :
886
909
for k in get_reserved_keywords ():
887
910
result .append (
888
911
CompletionItem (
0 commit comments