@@ -138,8 +138,8 @@ void parseMethodDescription2() {
138138 assertThat (methodDescription .getDeprecationInfo ()).isEmpty ();
139139 assertThat (methodDescription .getExamples ()).isEmpty ();
140140 assertThat (methodDescription .getLinks ())
141- .hasSize (1 )
142- . contains ( Hyperlink . create ( "ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла" ) );
141+ .hasSize (1 );
142+ assertThat ( methodDescription . getLinks (). get ( 0 ). link ()). isEqualTo ( "ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла" );
143143 assertThat (methodDescription .getParameters ()).hasSize (1 );
144144 checkParameter (methodDescription .getParameters ().get (0 ),
145145 "РежимДиалога" , 1 , "" , false );
@@ -459,8 +459,8 @@ void parseMethodDescription11() {
459459 assertThat (methodDescription .getDeprecationInfo ()).isEmpty ();
460460 assertThat (methodDescription .getExamples ()).isEmpty ();
461461 assertThat (methodDescription .getLinks ())
462- .hasSize (1 )
463- . containsExactly ( Hyperlink . create ( "CommonModule.MyModule.MyFunc()" ) );
462+ .hasSize (1 );
463+ assertThat ( methodDescription . getLinks (). get ( 0 ). link ()). isEqualTo ( "CommonModule.MyModule.MyFunc" );
464464 assertThat (methodDescription .getParameters ()).hasSize (1 );
465465 checkParameter (methodDescription .getParameters ().get (0 ),
466466 "CommonModule.MyModule.MyFunc" , 1 , "CommonModule.MyModule.MyFunc()" , true );
@@ -485,8 +485,8 @@ void parseMethodDescription12() {
485485 assertThat (methodDescription .getDeprecationInfo ()).isEmpty ();
486486 assertThat (methodDescription .getExamples ()).isEmpty ();
487487 assertThat (methodDescription .getLinks ())
488- .hasSize (1 )
489- . containsExactly ( Hyperlink . create ( "CommonModule.MyModule.MyFunc()" ) );
488+ .hasSize (1 );
489+ assertThat ( methodDescription . getLinks (). get ( 0 ). link ()). isEqualTo ( "CommonModule.MyModule.MyFunc" );
490490 assertThat (methodDescription .getParameters ()).isEmpty ();
491491 assertThat (methodDescription .getReturnedValue ()).isEmpty ();
492492
@@ -501,8 +501,8 @@ void parseMethodDescription13() {
501501 assertThat (methodDescription .getDeprecationInfo ()).isEmpty ();
502502 assertThat (methodDescription .getExamples ()).isEmpty ();
503503 assertThat (methodDescription .getLinks ())
504- .hasSize (1 )
505- . containsExactly ( Hyperlink . create ( "МойКлассныйМодуль.МойКлассныйКонструктор" ) );
504+ .hasSize (1 );
505+ assertThat ( methodDescription . getLinks (). get ( 0 ). link ()). isEqualTo ( "МойКлассныйМодуль.МойКлассныйКонструктор" );
506506 assertThat (methodDescription .getParameters ()).hasSize (1 );
507507
508508 var firstParameter = methodDescription .getParameters ().get (0 );
@@ -590,8 +590,8 @@ void parseVariableDescription3() {
590590 assertThat (variableDescription .getDeprecationInfo ()).isEqualTo ("см. НоваяПеременная" );
591591 assertThat (variableDescription .isDeprecated ()).isTrue ();
592592 assertThat (variableDescription .getLinks ())
593- .hasSize (1 )
594- . contains ( Hyperlink . create ( "НоваяПеременная" ) );
593+ .hasSize (1 );
594+ assertThat ( variableDescription . getLinks (). get ( 0 ). link ()). isEqualTo ( "НоваяПеременная" );
595595
596596 assertThat (
597597 Objects .equals (variableDescription .getRange (), create (1 , 22 )))
@@ -616,8 +616,8 @@ void parseVariableDescription4() {
616616 assertThat (variableDescription .getDeprecationInfo ()).isEmpty ();
617617 assertThat (variableDescription .isDeprecated ()).isFalse ();
618618 assertThat (variableDescription .getLinks ())
619- .hasSize (1 )
620- . contains ( Hyperlink . create ( "НоваяПеременная" ) );
619+ .hasSize (1 );
620+ assertThat ( variableDescription . getLinks (). get ( 0 ). link ()). isEqualTo ( "НоваяПеременная" );
621621
622622 assertThat (
623623 Objects .equals (variableDescription .getRange (), create (0 , 22 )))
@@ -717,8 +717,9 @@ void parseCollectionType() {
717717 assertThat (methodDescription .getDeprecationInfo ()).isEmpty ();
718718 assertThat (methodDescription .getExamples ()).isEmpty ();
719719 assertThat (methodDescription .getLinks ())
720- .hasSize (1 )
721- .contains (Hyperlink .create ("Мой.Метод(СПараметром)" ));
720+ .hasSize (1 );
721+ assertThat (methodDescription .getLinks ().get (0 ).link ()).isEqualTo ("Мой.Метод" );
722+ assertThat (methodDescription .getLinks ().get (0 ).params ()).isEqualTo ("СПараметром" );
722723 assertThat (methodDescription .getParameters ()).hasSize (1 );
723724 assertThat (methodDescription .getReturnedValue ()).isEmpty ();
724725
@@ -739,6 +740,36 @@ void parseCollectionType() {
739740 .containsAll (methodDescription .getParameters ().get (0 ).allElements ());
740741 }
741742
743+ @ Test
744+ void parseHyperlinkWithShift () {
745+ var exampleString = "// See CommonModule.MyModule.MyFunc()" ;
746+ var tokens = getTokensFromString (exampleString );
747+ var methodDescription = MethodDescription .create (tokens );
748+
749+ assertThat (methodDescription .getLinks ()).hasSize (1 );
750+ var hyperlink = methodDescription .getLinks ().get (0 );
751+ assertThat (hyperlink .link ()).isEqualTo ("CommonModule.MyModule.MyFunc" );
752+
753+ // Проверяем, что диапазон гиперссылки учитывает сдвиг
754+ // Гиперссылка начинается с 3 символа и заканчивается на 37 символе
755+ assertThat (hyperlink .range ()).isEqualTo (SimpleRange .create (0 , 3 , 0 , 37 ));
756+ }
757+
758+ @ Test
759+ void parseHyperlinkWithLineShift () {
760+ var exampleString = "\n \n // See CommonModule.MyModule.MyFunc()" ;
761+ var tokens = getTokensFromString (exampleString );
762+ var methodDescription = MethodDescription .create (tokens );
763+
764+ assertThat (methodDescription .getLinks ()).hasSize (1 );
765+ var hyperlink = methodDescription .getLinks ().get (0 );
766+ assertThat (hyperlink .link ()).isEqualTo ("CommonModule.MyModule.MyFunc" );
767+
768+ // Проверяем, что диапазон гиперссылки учитывает сдвиг строк
769+ // Комментарий начинается на 3-й строке (индекс 1 после токенизации), гиперссылка начинается с 3 символа и заканчивается на 37 символе
770+ assertThat (hyperlink .range ()).isEqualTo (SimpleRange .create (1 , 3 , 1 , 37 ));
771+ }
772+
742773 private List <Token > getTokensFromString (String exampleString ) {
743774 var tokenizer = new BSLTokenizer (exampleString );
744775 return tokenizer .getTokens ().stream ()
@@ -752,7 +783,9 @@ private void checkParameter(ParameterDescription parameter,
752783 String link ,
753784 boolean isHyperlink ) {
754785 assertThat (parameter .name ()).isEqualTo (name );
755- assertThat (parameter .link ()).isEqualTo (Hyperlink .create (link ));
786+ var expectedHyperlink = Hyperlink .create (link );
787+ assertThat (parameter .link ().link ()).isEqualTo (expectedHyperlink .link ());
788+ assertThat (parameter .link ().params ()).isEqualTo (expectedHyperlink .params ());
756789 assertThat (parameter .types ()).hasSize (countTypes );
757790 assertThat (parameter .isHyperlink ()).isEqualTo (isHyperlink );
758791 assertThat (parameter .element ().range ().length ()).isEqualTo (parameter .name ().length ());
@@ -769,7 +802,10 @@ private void checkType(TypeDescription type,
769802 assertThat (type .variant () == TypeDescription .Variant .HYPERLINK ).isEqualTo (isHyperlink );
770803 if (isHyperlink ) {
771804 assertThat (type ).isInstanceOf (HyperlinkTypeDescription .class );
772- assertThat (((HyperlinkTypeDescription ) type ).hyperlink ()).isEqualTo (Hyperlink .create (link ));
805+ var expectedHyperlink = Hyperlink .create (link );
806+ var actualHyperlink = ((HyperlinkTypeDescription ) type ).hyperlink ();
807+ assertThat (actualHyperlink .link ()).isEqualTo (expectedHyperlink .link ());
808+ assertThat (actualHyperlink .params ()).isEqualTo (expectedHyperlink .params ());
773809 }
774810 assertThat (type .fields ()).hasSize (countParameters );
775811 if (type instanceof CollectionTypeDescription colType ) {
0 commit comments