2020from ...common .lsp_types import Position
2121from ..diagnostics .entities import VariableDefinition , VariableNotFoundDefinition
2222from ..diagnostics .library_doc import KeywordDoc
23- from ..diagnostics .namespace import LibraryEntry , Namespace
23+ from ..diagnostics .namespace import DEFAULT_BDD_PREFIXES , LibraryEntry , Namespace
2424from ..utils .ast_utils import (
2525 Token ,
2626 is_not_variable_token ,
@@ -498,32 +498,32 @@ def split_bdd_prefix(cls, namespace: Namespace, token: Token) -> Tuple[Optional[
498498
499499 bdd_token = None
500500
501- parts = token .value .split (maxsplit = 1 )
502- if len (parts ) < 1 :
501+ parts = token .value .split ()
502+ if len (parts ) < 2 :
503503 return None , token
504504
505- prefix = parts [0 ]
506- if prefix .title () in (
507- namespace .languages .bdd_prefixes
508- if namespace .languages is not None
509- else {"Given " , "When " , "Then " , "And " , "But " }
510- ):
511- bdd_len = len (prefix )
512- bdd_token = RobotToken (
513- token .type ,
514- token .value [:bdd_len ],
515- token .lineno ,
516- token .col_offset ,
517- token .error ,
518- )
505+ for index in range (1 , len (parts )):
506+ prefix = " " .join (parts [:index ]).title ()
507+ if prefix in (
508+ namespace .languages .bdd_prefixes if namespace .languages is not None else DEFAULT_BDD_PREFIXES
509+ ):
510+ bdd_len = len (prefix )
511+ bdd_token = RobotToken (
512+ token .type ,
513+ token .value [:bdd_len ],
514+ token .lineno ,
515+ token .col_offset ,
516+ token .error ,
517+ )
519518
520- token = RobotToken (
521- token .type ,
522- token .value [bdd_len + 1 :],
523- token .lineno ,
524- token .col_offset + bdd_len + 1 ,
525- token .error ,
526- )
519+ token = RobotToken (
520+ token .type ,
521+ token .value [bdd_len + 1 :],
522+ token .lineno ,
523+ token .col_offset + bdd_len + 1 ,
524+ token .error ,
525+ )
526+ break
527527
528528 return bdd_token , token
529529
@@ -545,24 +545,24 @@ def strip_bdd_prefix(cls, namespace: Namespace, token: Token) -> Token:
545545 )
546546 return token
547547 else :
548- parts = token .value .split (maxsplit = 1 )
548+ parts = token .value .split ()
549549 if len (parts ) < 2 :
550550 return token
551551
552- prefix = parts [ 0 ]
553- if prefix . title () in (
554- namespace . languages . bdd_prefixes
555- if namespace .languages is not None
556- else { "Given " , "When " , "Then " , "And " , "But " }
557- ):
558- bdd_len = len ( prefix )
559- token = RobotToken (
560- token .type ,
561- token . value [ bdd_len + 1 :] ,
562- token .lineno ,
563- token . col_offset + bdd_len + 1 ,
564- token . error ,
565- )
552+ for index in range ( 1 , len ( parts )):
553+ prefix = " " . join ( parts [: index ]). title ()
554+ if prefix in (
555+ namespace . languages . bdd_prefixes if namespace .languages is not None else DEFAULT_BDD_PREFIXES
556+ ):
557+ bdd_len = len ( prefix )
558+ token = RobotToken (
559+ token . type ,
560+ token .value [ bdd_len + 1 :] ,
561+ token . lineno ,
562+ token .col_offset + bdd_len + 1 ,
563+ token . error ,
564+ )
565+ break
566566
567567 return token
568568
@@ -572,18 +572,17 @@ def is_bdd_token(cls, namespace: Namespace, token: Token) -> bool:
572572 bdd_match = cls .BDD_TOKEN .match (token .value )
573573 return bool (bdd_match )
574574 else :
575- parts = token .value .split (maxsplit = 1 )
576- if len (parts ) < 1 :
575+ parts = token .value .split ()
576+ if len (parts ) < 2 :
577577 return False
578578
579- prefix = parts [0 ]
579+ for index in range (1 , len (parts )):
580+ prefix = " " .join (parts [:index ]).title ()
580581
581- if prefix .title () in (
582- namespace .languages .bdd_prefixes
583- if namespace .languages is not None
584- else {"Given " , "When " , "Then " , "And " , "But " }
585- ):
586- return True
582+ if prefix .title () in (
583+ namespace .languages .bdd_prefixes if namespace .languages is not None else DEFAULT_BDD_PREFIXES
584+ ):
585+ return True
587586
588587 return False
589588
0 commit comments