Skip to content

Commit 06e96bb

Browse files
committed
Merge remote-tracking branch 'upstream/next' into rkapka-master
2 parents 2e57042 + 2f6ce7c commit 06e96bb

File tree

8 files changed

+122
-13
lines changed

8 files changed

+122
-13
lines changed

RetailCoder.VBE/UI/FindSymbol/FindSymbolControl.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
<ColumnDefinition Width="32" />
2222
</Grid.ColumnDefinitions>
2323

24-
<ComboBox IsEditable="True"
24+
<ComboBox x:Name="searchComboBox"
25+
IsEditable="True"
2526
ItemsSource="{Binding MatchResults}"
2627
SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
2728
IsTextSearchCaseSensitive="False"

RetailCoder.VBE/UI/FindSymbol/FindSymbolControl.xaml.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public partial class FindSymbolControl : UserControl
1111
public FindSymbolControl()
1212
{
1313
InitializeComponent();
14+
Loaded += FindSymbolControl_Loaded;
1415
}
1516

1617
private FindSymbolViewModel ViewModel { get { return (FindSymbolViewModel)DataContext; } }
@@ -43,5 +44,10 @@ private void UIElement_OnPreviewKeyDown(object sender, KeyEventArgs e)
4344
e.Handled = true;
4445
}
4546
}
47+
48+
private void FindSymbolControl_Loaded(object sender, System.Windows.RoutedEventArgs e)
49+
{
50+
searchComboBox.Focus();
51+
}
4652
}
47-
}
53+
}

RetailCoder.VBE/UI/FindSymbol/FindSymbolDialog.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ private void viewModel_Navigate(object sender, NavigateCodeEventArgs e)
2626
public FindSymbolDialog()
2727
{
2828
InitializeComponent();
29-
29+
3030
Text = string.Format("Rubberduck - {0}", RubberduckUI.FindSymbolDialog_Caption);
3131
}
3232

@@ -40,4 +40,4 @@ protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
4040
return base.ProcessCmdKey(ref msg, keyData);
4141
}
4242
}
43-
}
43+
}

RetailCoder.VBE/UI/FindSymbol/FindSymbolViewModel.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ public string SearchString
8383
get { return _searchString; }
8484
set
8585
{
86-
//Adding SelectedItem.set() will allow pasting to work?
8786
SearchResult firstResult = GetSearchResultCollectionOfString(value).FirstOrDefault();
8887
SelectedItem = firstResult;
8988

RetailCoder.VBE/UI/SourceControl/SourceControlProviderFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ public interface ISourceControlProviderFactory
77
{
88
ISourceControlProvider CreateProvider(IVBProject project);
99
ISourceControlProvider CreateProvider(IVBProject project, IRepository repository);
10-
ISourceControlProvider CreateProvider(IVBProject isAny, IRepository repository, SecureCredentials secureCredentials);
10+
ISourceControlProvider CreateProvider(IVBProject project, IRepository repository, SecureCredentials secureCredentials);
1111
}
1212
}

Rubberduck.Parsing/TokenExtensions.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@ public static class TokenExtensions
1515
/// <returns>Zero-based column position</returns>
1616
public static int EndColumn(this IToken token)
1717
{
18-
if (token.Text.Contains(Environment.NewLine))
18+
if (token.Text == Environment.NewLine)
1919
{
20-
var splitStrings = token.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
20+
return token.Column;
21+
}
22+
else if (token.Text.Contains(Environment.NewLine))
23+
{
24+
var splitStrings = token.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
2125
var lastOccupiedLine = splitStrings[splitStrings.Length - 1];
2226

2327
return lastOccupiedLine.Length;
@@ -37,9 +41,9 @@ public static int EndColumn(this IToken token)
3741
/// <returns>One-based line position</returns>
3842
public static int EndLine(this IToken token)
3943
{
40-
if (token.Text.Contains(Environment.NewLine))
44+
if (token.Text != Environment.NewLine && token.Text.Contains(Environment.NewLine))
4145
{
42-
var splitStrings = token.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
46+
var splitStrings = token.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
4347

4448
return token.Line + (splitStrings.Length - 1);
4549
}

Rubberduck.SourceControl/GitProvider.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ public GitProvider(IVBProject project, IRepository repository, string userName,
5252
_credentialsHandler = (url, user, cred) => _credentials;
5353
}
5454

55-
public GitProvider(IVBProject project, IRepository repository, ICredentials<SecureString> credentials)
55+
public GitProvider(IVBProject project, IRepository repository, ICredentials<SecureString> secureCredentials)
5656
: this(project, repository)
5757
{
5858
_credentials = new SecureUsernamePasswordCredentials()
5959
{
60-
Username = credentials.Username,
61-
Password = credentials.Password
60+
Username = secureCredentials.Username,
61+
Password = secureCredentials.Password
6262
};
6363

6464
_credentialsHandler = (url, user, cred) => _credentials;

RubberduckTests/Grammar/SelectionExtensionsTests.cs

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.VisualStudio.TestTools.UnitTesting;
33
using Rubberduck.Parsing;
44
using Rubberduck.Parsing.Grammar;
5+
using Rubberduck.Parsing.Symbols;
56
using static Rubberduck.Parsing.Grammar.VBAParser;
67
using Rubberduck.VBEditor;
78
using RubberduckTests.Mocks;
@@ -637,5 +638,103 @@ End If
637638
Assert.IsFalse(selection.Contains(contexts.ElementAt(1))); // first outer if block
638639
Assert.IsTrue(selection.Contains(contexts.ElementAt(2))); // second outer If block
639640
}
641+
642+
[TestMethod]
643+
[TestCategory("Grammar")]
644+
[TestCategory("Selection")]
645+
public void GivenOnlyBlankLines_EndColumn_Works()
646+
{
647+
const string inputCode = @"
648+
649+
650+
651+
";
652+
653+
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component);
654+
var pane = component.CodeModule.CodePane;
655+
var state = MockParser.CreateAndParse(vbe.Object);
656+
657+
658+
var tree = (Antlr4.Runtime.ParserRuleContext)state.GetParseTree(new QualifiedModuleName(component));
659+
var startToken = tree.Start;
660+
var endToken = tree.Stop;
661+
662+
// Reminder: token columns are zero-based but lines are one-based
663+
Assert.IsTrue(startToken.EndColumn() == 0);
664+
Assert.IsTrue(endToken.EndColumn() == 0);
665+
}
666+
667+
[TestMethod]
668+
[TestCategory("Grammar")]
669+
[TestCategory("Selection")]
670+
public void GivenOnlyBlankLines_EndLine_Works()
671+
{
672+
const string inputCode = @"
673+
674+
675+
676+
";
677+
678+
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component);
679+
var pane = component.CodeModule.CodePane;
680+
var state = MockParser.CreateAndParse(vbe.Object);
681+
682+
683+
var tree = (Antlr4.Runtime.ParserRuleContext)state.GetParseTree(new QualifiedModuleName(component));
684+
var startToken = tree.Start;
685+
var endToken = tree.Stop;
686+
687+
// Reminder: token columns are zero-based but lines are one-based
688+
Assert.IsTrue(startToken.EndLine() == 1);
689+
Assert.IsTrue(endToken.EndLine() == 4);
690+
}
691+
692+
[TestMethod]
693+
[TestCategory("Grammar")]
694+
[TestCategory("Selection")]
695+
public void GivenBlankLinesWithLeadingSpaces_EndColumn_Works()
696+
{
697+
const string inputCode = @"
698+
699+
700+
";
701+
702+
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component);
703+
var pane = component.CodeModule.CodePane;
704+
var state = MockParser.CreateAndParse(vbe.Object);
705+
706+
707+
var tree = (Antlr4.Runtime.ParserRuleContext)state.GetParseTree(new QualifiedModuleName(component));
708+
var startToken = tree.Start;
709+
var endToken = tree.Stop;
710+
711+
// Reminder: token columns are zero-based but lines are one-based
712+
Assert.IsTrue(startToken.EndColumn() == 0);
713+
Assert.IsTrue(endToken.EndColumn() == 3);
714+
}
715+
716+
[TestMethod]
717+
[TestCategory("Grammar")]
718+
[TestCategory("Selection")]
719+
public void GivenBlankLinesWithLeadingSpaces_EndLine_Works()
720+
{
721+
const string inputCode = @"
722+
723+
724+
";
725+
726+
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component);
727+
var pane = component.CodeModule.CodePane;
728+
var state = MockParser.CreateAndParse(vbe.Object);
729+
730+
731+
var tree = (Antlr4.Runtime.ParserRuleContext)state.GetParseTree(new QualifiedModuleName(component));
732+
var startToken = tree.Start;
733+
var endToken = tree.Stop;
734+
735+
// Reminder: token columns are zero-based but lines are one-based
736+
Assert.IsTrue(startToken.EndLine() == 1);
737+
Assert.IsTrue(endToken.EndLine() == 3);
738+
}
640739
}
641740
}

0 commit comments

Comments
 (0)