Skip to content

Commit e66b853

Browse files
committed
Merge branch 'refactor_interface' of https://github.com/Neverbirth/flashdevelop into refactor_interface
2 parents 6441c47 + 9872dc1 commit e66b853

File tree

9 files changed

+487
-1032
lines changed

9 files changed

+487
-1032
lines changed

External/Plugins/ASCompletion/Model/ASFileParser.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,7 +1189,7 @@ public void ParseSrc(FileModel fileModel, string ba, bool allowBaReExtract)
11891189
else
11901190
{
11911191
// valid chars for identifiers
1192-
if (char.IsLetter(c1))
1192+
if ((!haXe && char.IsLetter(c1)) || (c1 >= 'A' && c1 <= 'Z'))
11931193
{
11941194
addChar = true;
11951195
}
@@ -1262,8 +1262,17 @@ public void ParseSrc(FileModel fileModel, string ba, bool allowBaReExtract)
12621262
}
12631263
}
12641264
}
1265-
else if ((c1 == '(' || c1 == ')') && haXe && inType)
1265+
else if (c1 == ')' && haXe && inType)
12661266
{
1267+
if (paramParCount > 0)
1268+
{
1269+
paramParCount--;
1270+
addChar = true;
1271+
}// else inType = false, error? it may depend on the context
1272+
}
1273+
else if (c1 == '(' && haXe && inType)
1274+
{
1275+
paramParCount++;
12671276
addChar = true;
12681277
}
12691278
else
@@ -1445,6 +1454,7 @@ public void ParseSrc(FileModel fileModel, string ba, bool allowBaReExtract)
14451454
{
14461455
inType = true;
14471456
addChar = true;
1457+
paramParCount++;
14481458
}
14491459
}
14501460
else context = 0;
@@ -1538,6 +1548,7 @@ public void ParseSrc(FileModel fileModel, string ba, bool allowBaReExtract)
15381548
{
15391549
context = (inEnum) ? FlagType.Enum : 0;
15401550
inGeneric = false;
1551+
inType = false;
15411552
modifiers = 0;
15421553
inParams = false;
15431554
curMember = null;

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@
111111
<DesignTime>True</DesignTime>
112112
<DependentUpon>Resources.resx</DependentUpon>
113113
</Compile>
114+
<Compile Include="TestUtils\ContextExtensions.cs" />
114115
<Compile Include="TestUtils\TestFile.cs" />
115116
</ItemGroup>
116117
<ItemGroup>
@@ -163,6 +164,7 @@
163164
<EmbeddedResource Include="Test Files\generated\as3\FieldFromParameterWithWrongSuperConstructor.as" />
164165
<EmbeddedResource Include="Test Files\generated\as3\BeforeFieldFromParameterWithSuperConstructorMultiLine.as" />
165166
<EmbeddedResource Include="Test Files\generated\as3\BeforeFieldFromParameterWithWrongSuperConstructor.as" />
167+
<EmbeddedResource Include="Test Files\parser\as3\IdentifiersWithUnicodeCharsTest.as" />
166168
</ItemGroup>
167169
<ItemGroup>
168170
<ProjectReference Include="..\..\..\..\External\Plugins\AS2Context\AS2Context.csproj">

Tests/External/Plugins/ASCompletion.Tests/Completion/ASCompleteTests.cs

Lines changed: 50 additions & 532 deletions
Large diffs are not rendered by default.

Tests/External/Plugins/ASCompletion.Tests/Completion/ASGeneratorTests.cs

Lines changed: 332 additions & 479 deletions
Large diffs are not rendered by default.

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

Lines changed: 56 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,39 @@ public void ParseFile_CompletionError()
9595
Assert.AreEqual(FlagType.Variable, infoMember.Flags & FlagType.Variable);
9696
}
9797
}
98+
99+
[Test]
100+
public void ParseFile_IdentifiersWithUnicodeChars()
101+
{
102+
using (var resourceFile = new TestFile("ASCompletion.Test_Files.parser.as3.IdentifiersWithUnicodeCharsTest.as"))
103+
{
104+
var srcModel = new FileModel(resourceFile.DestinationFile);
105+
srcModel.Context = new AS3Context.Context(new AS3Context.AS3Settings());
106+
var model = ASFileParser.ParseFile(srcModel);
107+
var classModel = model.Classes[0];
108+
Assert.AreEqual("Test", classModel.Name);
109+
Assert.AreEqual(FlagType.Class, classModel.Flags & FlagType.Class);
110+
Assert.AreEqual(2, classModel.LineFrom);
111+
Assert.AreEqual(9, classModel.LineTo);
112+
Assert.AreEqual(2, classModel.Members.Count);
113+
114+
var memberModel = classModel.Members[0];
115+
Assert.AreEqual("thísIsVälid", memberModel.Name);
116+
Assert.AreEqual("String", memberModel.Type);
117+
Assert.AreEqual(FlagType.Function, memberModel.Flags & FlagType.Function);
118+
Assert.AreEqual(Visibility.Public, memberModel.Access & Visibility.Public);
119+
Assert.AreEqual(4, memberModel.LineFrom);
120+
Assert.AreEqual(6, memberModel.LineTo);
121+
122+
memberModel = classModel.Members[1];
123+
Assert.AreEqual("日本語文字ヴァリアブル", memberModel.Name);
124+
Assert.AreEqual("Dynamic", memberModel.Type);
125+
Assert.AreEqual(FlagType.Variable, memberModel.Flags & FlagType.Variable);
126+
Assert.AreEqual(Visibility.Public, memberModel.Access & Visibility.Public);
127+
Assert.AreEqual(8, memberModel.LineFrom);
128+
Assert.AreEqual(8, memberModel.LineTo);
129+
}
130+
}
98131
}
99132

100133
[TestFixture]
@@ -188,30 +221,42 @@ public void ParseFile_Interface()
188221
Assert.AreEqual("Test", classModel.Name);
189222
Assert.AreEqual(Visibility.Public, classModel.Access);
190223
Assert.AreEqual(FlagType.Interface, classModel.Flags & FlagType.Interface);
191-
Assert.AreEqual(4, classModel.Members.Count);
224+
Assert.AreEqual(5, classModel.Members.Count);
192225

193226
var member = classModel.Members[0];
194-
Assert.AreEqual("test", member.Name);
195-
Assert.AreEqual("Int", member.Type);
196-
Assert.IsNull(member.Parameters);
197-
Assert.AreEqual(Visibility.Public, member.Access);
198-
Assert.AreEqual(FlagType.Function, member.Flags & FlagType.Function);
199-
200-
member = classModel.Members[1];
201227
Assert.AreEqual("testVar", member.Name);
202228
Assert.AreEqual("String", member.Type);
203229
Assert.IsNull(member.Parameters);
204230
Assert.AreEqual(Visibility.Public, member.Access);
205231
Assert.AreEqual(FlagType.Variable, member.Flags & FlagType.Variable);
206232

233+
member = classModel.Members[1];
234+
Assert.AreEqual("test", member.Name);
235+
Assert.AreEqual("Int", member.Type);
236+
Assert.AreEqual(1, member.Parameters.Count);
237+
Assert.AreEqual("?arg", member.Parameters[0].Name);
238+
Assert.AreEqual("Array<Dynamic>", member.Parameters[0].Type);
239+
Assert.AreEqual(Visibility.Public, member.Access);
240+
Assert.AreEqual(FlagType.Function, member.Flags & FlagType.Function);
241+
207242
member = classModel.Members[2];
243+
Assert.AreEqual("test2", member.Name);
244+
Assert.AreEqual("Void", member.Type);
245+
Assert.AreEqual(1, member.Parameters.Count);
246+
Assert.AreEqual("arg", member.Parameters[0].Name);
247+
Assert.AreEqual("Bool", member.Parameters[0].Type);
248+
Assert.AreEqual(1, member.Parameters.Count);
249+
Assert.AreEqual(Visibility.Public, member.Access);
250+
Assert.AreEqual(FlagType.Function, member.Flags & FlagType.Function);
251+
252+
member = classModel.Members[3];
208253
Assert.AreEqual("testPrivate", member.Name);
209254
Assert.AreEqual("Int", member.Type);
210255
Assert.IsNull(member.Parameters);
211256
Assert.AreEqual(Visibility.Private, member.Access);
212257
Assert.AreEqual(FlagType.Function, member.Flags & FlagType.Function);
213258

214-
member = classModel.Members[3];
259+
member = classModel.Members[4];
215260
Assert.AreEqual("testProperty", member.Name);
216261
Assert.AreEqual("Float", member.Type);
217262
Assert.AreEqual(2, member.Parameters.Count);
@@ -1479,18 +1524,12 @@ public void ParseFile_IdentifiersWithUnicodeChars()
14791524
Assert.AreEqual(2, classModel.Members.Count);
14801525

14811526
var memberModel = classModel.Members[0];
1482-
Assert.AreEqual("thísIsVälid", memberModel.Name);
1483-
Assert.AreEqual("String", memberModel.Type);
1484-
Assert.AreEqual(FlagType.Function, memberModel.Flags & FlagType.Function);
1485-
Assert.AreEqual(Visibility.Public, memberModel.Access & Visibility.Public);
1527+
Assert.AreNotEqual("thísIsVälid", memberModel.Name);
14861528
Assert.AreEqual(4, memberModel.LineFrom);
14871529
Assert.AreEqual(6, memberModel.LineTo);
14881530

14891531
memberModel = classModel.Members[1];
1490-
Assert.AreEqual("日本語文字ヴァリアブル", memberModel.Name);
1491-
Assert.AreEqual("Dynamic", memberModel.Type);
1492-
Assert.AreEqual(FlagType.Variable, memberModel.Flags & FlagType.Variable);
1493-
Assert.AreEqual(Visibility.Public, memberModel.Access & Visibility.Public);
1532+
Assert.AreNotEqual("日本語文字ヴァリアブル", memberModel.Name);
14941533
Assert.AreEqual(8, memberModel.LineFrom);
14951534
Assert.AreEqual(8, memberModel.LineTo);
14961535
}

Tests/External/Plugins/ASCompletion.Tests/Test Files/generated/haxe/ImplementInterfaceNoMembers.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class ImplementTest{
3434

3535
}
3636

37-
private function testPrivateMethod(?arg:String, ?arg2:Int = 1):Float {
37+
function testPrivateMethod(?arg:String, ?arg2:Int = 1):Float {
3838

3939
}
4040
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package
2+
{
3+
class Test
4+
{
5+
public function thísIsVälid():String
6+
{
7+
}
8+
9+
public var 日本語文字ヴァリアブル:Dynamic;
10+
}
11+
}

Tests/External/Plugins/ASCompletion.Tests/Test Files/parser/haxe/InterfaceTest.hx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ package test.test;
22

33
interface Test
44
{
5-
function test():Int;
65
var testVar:String;
6+
function test(?arg:Array<Dynamic>):Int;
7+
function test2(arg:Bool):Void;
78
private function testPrivate():Int;
89
var testProperty(get, set):Float;
910
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using ASCompletion.Context;
2+
using NSubstitute;
3+
4+
namespace ASCompletion.TestUtils
5+
{
6+
public static class ContextExtensions
7+
{
8+
public static void SetAs3Features(this object context)
9+
{
10+
//var asContext = new AS3Context.Context(new AS3Context.AS3Settings());
11+
//context.Features.Returns(asContext.Features);
12+
}
13+
14+
public static void SetHaxeFeatures(this object context)
15+
{
16+
//var haxeContext = new HaXeContext.Context(new HaXeContext.HaXeSettings());
17+
//context.Features.Returns(haxeContext.Features);
18+
}
19+
}
20+
}

0 commit comments

Comments
 (0)