@@ -40,11 +40,19 @@ public virtual bool Execute(AutoCompleteEventArgs e, AutoCompleteSettings settin
4040                var  nextChar  =  zSelection . StartColumn  ==  original . Length  ?  string . Empty  :  original . Substring ( zSelection . StartColumn ,  1 ) ; 
4141                if  ( input  ==  InputToken  &&  ( input  !=  OutputToken  ||  nextChar  !=  OutputToken ) ) 
4242                { 
43-                     var  code  =  original . Insert ( Math . Max ( 0 ,  zSelection . StartColumn ) ,  InputToken  +  OutputToken ) ; 
43+                     string  code ; 
44+                     if  ( ! StripExplicitCallStatement ( ref  original ,  ref  pSelection ) ) 
45+                     { 
46+                         code  =  original . Insert ( Math . Max ( 0 ,  zSelection . StartColumn ) ,  InputToken  +  OutputToken ) ; 
47+                     } 
48+                     else 
49+                     { 
50+                         code  =  original ; 
51+                     } 
4452                    module . ReplaceLine ( pSelection . StartLine ,  code ) ; 
4553
4654                    var  newCode  =  module . GetLines ( pSelection ) ; 
47-                     if  ( newCode   ==   code ) 
55+                     if  ( newCode . Equals ( code ,   StringComparison . OrdinalIgnoreCase ) ) 
4856                    { 
4957                        pane . Selection  =  new  Selection ( pSelection . StartLine ,  pSelection . StartColumn  +  1 ) ; 
5058                    } 
@@ -67,6 +75,21 @@ public virtual bool Execute(AutoCompleteEventArgs e, AutoCompleteSettings settin
6775            } 
6876        } 
6977
78+         private  bool  StripExplicitCallStatement ( ref  string  code ,  ref  Selection  pSelection ) 
79+         { 
80+             // VBE will "helpfully" strip empty parentheses in 'Call Something()' 
81+             // ...and there's no way around it. since Call statement is optional and obsolete, 
82+             // this function strips it 
83+             var  pattern  =  @"\bCall\b\s+" ; 
84+             if  ( Regex . IsMatch ( code ,  pattern ,  RegexOptions . IgnoreCase ) ) 
85+             { 
86+                 pSelection  =  new  Selection ( pSelection . StartLine ,  pSelection . StartColumn  -  "Call " . Length ) ; 
87+                 code  =  Regex . Replace ( code ,  pattern ,  string . Empty ,  RegexOptions . IgnoreCase ) ; 
88+                 return  true ; 
89+             } 
90+             return  false ; 
91+         } 
92+ 
7093        private  int  GetPrettifiedCaretPosition ( Selection  pSelection ,  string  insertedCode ,  string  prettifiedCode ) 
7194        { 
7295            var  zSelection  =  pSelection . ToZeroBased ( ) ; 
@@ -80,7 +103,10 @@ private int GetPrettifiedCaretPosition(Selection pSelection, string insertedCode
80103                    outputTokenIndices . Add ( i ) ; 
81104                } 
82105            } 
83- 
106+             if  ( ! outputTokenIndices . Any ( ) ) 
107+             { 
108+                 return  pSelection . EndColumn ; 
109+             } 
84110            var  firstAfterCaret  =  outputTokenIndices . Where ( i =>  i  >  zSelection . StartColumn ) . Min ( ) ; 
85111
86112            var  prettifiedTokenIndices  =  new  List < int > ( ) ; 
@@ -93,7 +119,9 @@ private int GetPrettifiedCaretPosition(Selection pSelection, string insertedCode
93119                } 
94120            } 
95121
96-             return  prettifiedTokenIndices [ outputTokenIndices . IndexOf ( firstAfterCaret ) ]  +  1 ; 
122+             return  prettifiedTokenIndices . Any ( ) 
123+                 ?  prettifiedTokenIndices [ outputTokenIndices . IndexOf ( firstAfterCaret ) ]  +  1 
124+                 :  prettifiedCode . Length  +  2 ; 
97125        } 
98126
99127        public  virtual  bool  IsMatch ( string  input )  =>  
0 commit comments