Skip to content

Commit ff82541

Browse files
committed
Merge pull request #1143 from Neverbirth/development
Parsing improvements
2 parents 5b3dec4 + d5882a8 commit ff82541

File tree

6 files changed

+130
-5
lines changed

6 files changed

+130
-5
lines changed

External/Plugins/ASCompletion/ASCompletion.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@
8484
<Compile Include="Completion\ASDocumentation.cs" />
8585
<Compile Include="Completion\ContextFeatures.cs" />
8686
<Compile Include="Context\IASContext.cs" />
87-
<Compile Include="CustomControls\StateSavingTreeView.cs" />
87+
<Compile Include="CustomControls\StateSavingTreeView.cs">
88+
<SubType>Component</SubType>
89+
</Compile>
8890
<Compile Include="CustomControls\ModelsExplorer.cs">
8991
<SubType>UserControl</SubType>
9092
</Compile>

External/Plugins/ASCompletion/Model/ASFileParser.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,7 +1081,7 @@ public void ParseSrc(FileModel fileModel, string ba, bool allowBaReExtract)
10811081
else if (valueError && c1 == ')') inValue = false;
10821082
else if (inType && inGeneric && (c1 == '<' || c1 == '.')) continue;
10831083
else if (inAnonType) continue;
1084-
hadWS = true;
1084+
else if (c1 != '_') hadWS = true;
10851085
}
10861086
}
10871087

@@ -1223,7 +1223,7 @@ public void ParseSrc(FileModel fileModel, string ba, bool allowBaReExtract)
12231223
{
12241224
if (!inValue && i > 2 && length > 1 && i < len - 3
12251225
&& char.IsLetterOrDigit(ba[i - 3]) && (char.IsLetter(ba[i]) || (haXe && ba[i] == '{'))
1226-
&& (char.IsLetter(buffer[0]) || buffer[0] == '_'))
1226+
&& (char.IsLetter(buffer[0]) || buffer[0] == '_' || inType && buffer[0] == '('))
12271227
{
12281228
if (curMember == null)
12291229
{
@@ -1266,7 +1266,7 @@ public void ParseSrc(FileModel fileModel, string ba, bool allowBaReExtract)
12661266
if (!inValue)
12671267
{
12681268
addChar = true;
1269-
if (c1 == '>' && inGeneric)
1269+
if (c1 == '>')
12701270
{
12711271
if (paramTempCount > 0) paramTempCount--;
12721272
if (paramTempCount == 0 && paramBraceCount == 0
@@ -1280,7 +1280,14 @@ public void ParseSrc(FileModel fileModel, string ba, bool allowBaReExtract)
12801280
{
12811281
paramParCount--;
12821282
addChar = true;
1283-
}// else inType = false, error? it may depend on the context
1283+
}
1284+
else if (paramParCount == 0 && paramTempCount == 0 && paramBraceCount == 0
1285+
&& paramSqCount == 0)
1286+
{
1287+
inType = false;
1288+
shortcut = false;
1289+
evalToken = 1;
1290+
}
12841291
}
12851292
else if (c1 == '(' && haXe && inType)
12861293
{

Tests/External/Plugins/ASCompletion.Tests/ASCompletion.Tests.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@
169169
<EmbeddedResource Include="Test Files\parser\haxe\MetadataTest.hx" />
170170
<EmbeddedResource Include="Test Files\parser\haxe\MethodAfterGenericReturnTest.hx" />
171171
<EmbeddedResource Include="Test Files\parser\haxe\WrongSyntaxCompilerMetaAfterVarWithNoType.hx" />
172+
<EmbeddedResource Include="Test Files\parser\haxe\FunctionTypesAsArgumentsTest.hx" />
173+
<EmbeddedResource Include="Test Files\parser\haxe\KeywordAndUnderscoreInNameTest.hx" />
172174
</ItemGroup>
173175
<ItemGroup>
174176
<ProjectReference Include="..\..\..\..\External\Plugins\AS2Context\AS2Context.csproj">

Tests/External/Plugins/ASCompletion.Tests/Model/ASFileParserTests.cs

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,6 +1591,97 @@ public void ParseFile_MethodAfterGenericReturn()
15911591
}
15921592
}
15931593

1594+
[Test(Description = "Issue 1125")]
1595+
public void ParseFile_FunctionTypesAsArguments()
1596+
{
1597+
using (var resourceFile = new TestFile("ASCompletion.Test_Files.parser.haxe.FunctionTypesAsArgumentsTest.hx"))
1598+
{
1599+
var srcModel = new FileModel(resourceFile.DestinationFile);
1600+
srcModel.Context = new HaXeContext.Context(new HaXeContext.HaXeSettings());
1601+
var model = ASFileParser.ParseFile(srcModel);
1602+
var classModel = model.Classes[0];
1603+
Assert.AreEqual("Test", classModel.Name);
1604+
Assert.AreEqual(FlagType.Class, classModel.Flags & FlagType.Class);
1605+
Assert.AreEqual(2, classModel.LineFrom);
1606+
Assert.AreEqual(15, classModel.LineTo);
1607+
Assert.AreEqual(3, classModel.Members.Count);
1608+
1609+
var memberModel = classModel.Members[0];
1610+
Assert.AreEqual("func1", memberModel.Name);
1611+
Assert.AreEqual("Array<Dynamic>", memberModel.Type);
1612+
var flags = FlagType.Function;
1613+
Assert.AreEqual(flags, memberModel.Flags & flags);
1614+
Assert.AreEqual(Visibility.Private, memberModel.Access);
1615+
Assert.AreEqual(4, memberModel.LineFrom);
1616+
Assert.AreEqual(6, memberModel.LineTo);
1617+
Assert.AreEqual(1, memberModel.Parameters.Count);
1618+
Assert.AreEqual("arg", memberModel.Parameters[0].Name);
1619+
Assert.AreEqual("(Float->Int)->(Int->Array<Dynamic>)", memberModel.Parameters[0].Type);
1620+
1621+
memberModel = classModel.Members[1];
1622+
Assert.AreEqual("func2", memberModel.Name);
1623+
Assert.AreEqual(null, memberModel.Type);
1624+
flags = FlagType.Function;
1625+
Assert.AreEqual(flags, memberModel.Flags & flags);
1626+
Assert.AreEqual(Visibility.Public, memberModel.Access);
1627+
Assert.AreEqual(8, memberModel.LineFrom);
1628+
Assert.AreEqual(10, memberModel.LineTo);
1629+
Assert.AreEqual(2, memberModel.Parameters.Count);
1630+
Assert.AreEqual("arg1", memberModel.Parameters[0].Name);
1631+
Assert.AreEqual("Int->Void", memberModel.Parameters[0].Type);
1632+
Assert.AreEqual("arg2", memberModel.Parameters[1].Name);
1633+
Assert.AreEqual("Dynamic", memberModel.Parameters[1].Type);
1634+
1635+
memberModel = classModel.Members[2];
1636+
Assert.AreEqual("func3", memberModel.Name);
1637+
Assert.AreEqual("Int", memberModel.Type);
1638+
flags = FlagType.Function;
1639+
Assert.AreEqual(flags, memberModel.Flags & flags);
1640+
Assert.AreEqual(Visibility.Private, memberModel.Access);
1641+
Assert.AreEqual(12, memberModel.LineFrom);
1642+
Assert.AreEqual(14, memberModel.LineTo);
1643+
Assert.AreEqual(1, memberModel.Parameters.Count);
1644+
Assert.AreEqual("arg", memberModel.Parameters[0].Name);
1645+
Assert.AreEqual("Float", memberModel.Parameters[0].Type);
1646+
}
1647+
}
1648+
1649+
[Test(Description = "Issue 1141")]
1650+
public void ParseFile_KeywordAndUnderscoreInName()
1651+
{
1652+
using (var resourceFile = new TestFile("ASCompletion.Test_Files.parser.haxe.KeywordAndUnderscoreInNameTest.hx"))
1653+
{
1654+
var srcModel = new FileModel(resourceFile.DestinationFile);
1655+
srcModel.Context = new HaXeContext.Context(new HaXeContext.HaXeSettings());
1656+
var model = ASFileParser.ParseFile(srcModel);
1657+
var classModel = model.Classes[0];
1658+
Assert.AreEqual(1, model.Classes.Count);
1659+
Assert.AreEqual("Test", classModel.Name);
1660+
Assert.AreEqual(FlagType.Class, classModel.Flags & FlagType.Class);
1661+
Assert.AreEqual(2, classModel.LineFrom);
1662+
Assert.AreEqual(6, classModel.LineTo);
1663+
Assert.AreEqual(2, classModel.Members.Count);
1664+
1665+
var memberModel = classModel.Members[0];
1666+
Assert.AreEqual("var_1244", memberModel.Name);
1667+
Assert.AreEqual("Int", memberModel.Type);
1668+
var flags = FlagType.Variable | FlagType.Static;
1669+
Assert.AreEqual(flags, memberModel.Flags & flags);
1670+
Assert.AreEqual(Visibility.Public, memberModel.Access & Visibility.Public);
1671+
Assert.AreEqual(4, memberModel.LineFrom);
1672+
Assert.AreEqual(4, memberModel.LineTo);
1673+
1674+
memberModel = classModel.Members[1];
1675+
Assert.AreEqual("ERR_LOGINFAILED", memberModel.Name);
1676+
Assert.AreEqual("Int", memberModel.Type);
1677+
flags = FlagType.Variable | FlagType.Static;
1678+
Assert.AreEqual(flags, memberModel.Flags & flags);
1679+
Assert.AreEqual(Visibility.Public, memberModel.Access & Visibility.Public);
1680+
Assert.AreEqual(5, memberModel.LineFrom);
1681+
Assert.AreEqual(5, memberModel.LineTo);
1682+
}
1683+
}
1684+
15941685
[Test]
15951686
public void ParseFile_IdentifiersWithUnicodeChars()
15961687
{
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package test.test;
2+
3+
class Test
4+
{
5+
function func1(arg:(Float->Int)->(Int->Array<Dynamic>)):Array<Dynamic>
6+
{
7+
}
8+
9+
public function func2(arg1:Int->Void, arg2:Dynamic)
10+
{
11+
}
12+
13+
private function func3(arg:Float):Int
14+
{
15+
}
16+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package test.test;
2+
3+
class Test
4+
{
5+
public static var var_1244:Int = class_12.method_2017();
6+
public static var ERR_LOGINFAILED:Int = -1;
7+
}

0 commit comments

Comments
 (0)