Skip to content

Commit 0141667

Browse files
committed
Refactorings in method GetParserReferences()
1 parent 3e41ce5 commit 0141667

1 file changed

Lines changed: 12 additions & 29 deletions

File tree

src/XLParser/ExcelFormulaParser.cs

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4-
using System.Text;
54
using Irony.Parsing;
65

76
namespace XLParser
@@ -425,51 +424,35 @@ public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNod
425424
default:
426425
if (node.IsRange())
427426
{
428-
var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();
429-
var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();
430-
if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))
427+
var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).First();
428+
var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).First();
429+
if (rangeStart.ReferenceType == ReferenceType.Cell && rangeEnd.ReferenceType == ReferenceType.Cell)
431430
{
432-
ParserReference range = rangeStart.First();
433-
range.MaxLocation = rangeEnd.First().MinLocation;
431+
ParserReference range = rangeStart;
432+
range.MaxLocation = rangeEnd.MinLocation;
434433
range.ReferenceType = ReferenceType.CellRange;
435434
range.ReferenceNode = node;
436435
range.LocationString = node.Print();
437436
list.Add(range);
437+
break;
438438
}
439-
else if (IsTableReference(rangeStart) && IsTableReference(rangeEnd) && rangeStart.First().Name == rangeEnd.First().Name && rangeStart.First().TableColumns.Length == 1 && rangeEnd.First().TableColumns.Length == 1)
439+
if (rangeStart.ReferenceType == ReferenceType.Table && rangeEnd.ReferenceType == ReferenceType.Table && rangeStart.Name == rangeEnd.Name && rangeStart.TableColumns.Length == 1 && rangeEnd.TableColumns.Length == 1)
440440
{
441-
ParserReference range = rangeStart.First();
442-
range.TableColumns = rangeStart.First().TableColumns.Concat(rangeEnd.First().TableColumns).ToArray();
443-
range.TableSpecifiers = rangeStart.First().TableSpecifiers.SequenceEqual(rangeEnd.First().TableSpecifiers) ? range.TableSpecifiers : new string[0];
441+
ParserReference range = rangeStart;
442+
range.TableColumns = rangeStart.TableColumns.Concat(rangeEnd.TableColumns).ToArray();
443+
range.TableSpecifiers = rangeStart.TableSpecifiers.SequenceEqual(rangeEnd.TableSpecifiers) ? range.TableSpecifiers : new string[0];
444444
range.ReferenceNode = node;
445445
range.LocationString = node.Print();
446446
list.Add(range);
447-
}
448-
else
449-
{
450-
list.AddRange(rangeStart);
451-
list.AddRange(rangeEnd);
447+
break;
452448
}
453449
}
454-
else
455-
{
456-
list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));
457-
}
450+
list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));
458451
break;
459452
}
460453
return list;
461454
}
462455

463-
private static bool IsCellReference(IList<ParserReference> references)
464-
{
465-
return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;
466-
}
467-
468-
private static bool IsTableReference(IList<ParserReference> references)
469-
{
470-
return references.Count == 1 && references.First().ReferenceType == ReferenceType.Table;
471-
}
472-
473456
/// <summary>
474457
/// Whether or not this node represents a range
475458
/// </summary>

0 commit comments

Comments
 (0)