Skip to content

Commit a425800

Browse files
Base commit
Basic proof of concept for comunication between node.js and FSharp.Autocomplete using standard I/O
1 parent 1614ec1 commit a425800

25 files changed

+653
-0
lines changed

Test/FileTwo.fs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module FileTwo
2+
3+
type Foo =
4+
| Bar
5+
| Qux
6+
7+
let addition x y = x + y
8+
9+
let add x y = x + y
10+
11+
type NewObjectType() =
12+
13+
member x.Terrific (y : int) : int =
14+
y

Test/Program.fs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module X =
2+
let func x = x + 1
3+
4+
let testval = FileTwo.NewObjectType()
5+
6+
let val2 = X.func 2
7+
8+
let val3 = testval.Terrific val2
9+
10+
let val4 : FileTwo.NewObjectType = testval
11+
12+
[<EntryPoint>]
13+
let main args =
14+
printfn "Hello %d" val2
15+
0

Test/Script.fsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
3+
module XA =
4+
let funky x = x + 1
5+
6+
let val99 = XA.funky 21

Test/Test1.fsproj

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
5+
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
6+
<ProductVersion>8.0.30703</ProductVersion>
7+
<SchemaVersion>2.0</SchemaVersion>
8+
<ProjectGuid>{116cc2f9-f987-4b3d-915a-34cac04a73da}</ProjectGuid>
9+
<OutputType>Exe</OutputType>
10+
<RootNamespace>Test1</RootNamespace>
11+
<AssemblyName>Test1</AssemblyName>
12+
<Name>Test1</Name>
13+
<UsePartialTypes>False</UsePartialTypes>
14+
<BuildOrder>
15+
<BuildOrder>
16+
<String>Program.fs</String>
17+
</BuildOrder>
18+
</BuildOrder>
19+
<TargetFSharpCoreVersion>4.3.0.0</TargetFSharpCoreVersion>
20+
<MinimumVisualStudioVersion Condition="'$(MinimumVisualStudioVersion)' == ''">11</MinimumVisualStudioVersion>
21+
</PropertyGroup>
22+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
23+
<DebugSymbols>True</DebugSymbols>
24+
<DebugType>full</DebugType>
25+
<Optimize>False</Optimize>
26+
<Tailcalls>False</Tailcalls>
27+
<OutputPath>bin\Debug\</OutputPath>
28+
<DefineConstants>DEBUG;TRACE</DefineConstants>
29+
<WarningLevel>3</WarningLevel>
30+
<PlatformTarget>x86</PlatformTarget>
31+
<DocumentationFile>bin\Debug\Test1.XML</DocumentationFile>
32+
</PropertyGroup>
33+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
34+
<DebugType>pdbonly</DebugType>
35+
<Optimize>True</Optimize>
36+
<Tailcalls>True</Tailcalls>
37+
<OutputPath>bin\Release\</OutputPath>
38+
<DefineConstants>TRACE</DefineConstants>
39+
<WarningLevel>3</WarningLevel>
40+
<PlatformTarget>x86</PlatformTarget>
41+
<DocumentationFile>bin\Release\Test1.XML</DocumentationFile>
42+
<DebugSymbols>False</DebugSymbols>
43+
</PropertyGroup>
44+
<ItemGroup>
45+
<Reference Include="FSharp.Core, Version=$(TargetFSharpCoreVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
46+
<Private>True</Private>
47+
</Reference>
48+
<Reference Include="mscorlib" />
49+
<Reference Include="System" />
50+
<Reference Include="System.Core" />
51+
</ItemGroup>
52+
<ItemGroup>
53+
<Compile Include="FileTwo.fs" />
54+
<Compile Include="Program.fs" />
55+
</ItemGroup>
56+
<Choose>
57+
<When Condition="'$(VisualStudioVersion)' == '11.0'">
58+
<PropertyGroup>
59+
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
60+
</PropertyGroup>
61+
</When>
62+
<Otherwise>
63+
<PropertyGroup>
64+
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
65+
</PropertyGroup>
66+
</Otherwise>
67+
</Choose>
68+
<Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')" />
69+
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
70+
Other similar extension points exist, see Microsoft.Common.targets.
71+
<Target Name="BeforeBuild">
72+
</Target>
73+
<Target Name="AfterBuild">
74+
</Target>
75+
-->
76+
</Project>

Test/Test1JsonRunner.fsx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#load "../TestHelpers.fsx"
2+
open TestHelpers
3+
open System.IO
4+
open System
5+
6+
(*
7+
* This test is a simple sanity check of a basic run of the program.
8+
* A few completions, files and script.
9+
*)
10+
11+
Environment.CurrentDirectory <- __SOURCE_DIRECTORY__
12+
File.Delete "output.txt"
13+
14+
let p = new FSharpAutoCompleteWrapper()
15+
16+
p.send "outputmode json\n"
17+
p.project "Test1.fsproj"
18+
p.parse "FileTwo.fs"
19+
p.parse "Script.fsx"
20+
p.parse "Program.fs"
21+
Threading.Thread.Sleep(8000)
22+
p.completion "Script.fsx" 6 15
23+
p.completion "Program.fs" 8 19
24+
p.completion "Program.fs" 4 22
25+
p.completion "Program.fs" 6 13
26+
p.completion "Program.fs" 10 19
27+
p.tooltip "FileTwo.fs" 9 6
28+
p.tooltip "Program.fs" 6 15
29+
p.tooltip "Program.fs" 4 8
30+
p.tooltip "Script.fsx" 4 9
31+
p.finddeclaration "Program.fs" 8 22
32+
p.finddeclaration "Script.fsx" 6 15
33+
p.declarations "Program.fs"
34+
p.declarations "FileTwo.fs"
35+
p.declarations "Script.fsx"
36+
Threading.Thread.Sleep(1000)
37+
p.send "quit\n"
38+
let output = p.finalOutput ()
39+
File.WriteAllText("output.json", output)
40+

Test/output.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{"Kind":"project","Data":{"Project":"<absolute path removed>/test/integration/Test1Json/Test1.fsproj","Files":["<absolute path removed>/test/integration/Test1Json/FileTwo.fs","<absolute path removed>/test/integration/Test1Json/Program.fs"],"Output":"<absolute path removed>/test/integration/Test1Json/bin/Debug/Test1.exe","References":["<absolute path removed>/FSharp.Core.dll","<absolute path removed>/System.Core.dll","<absolute path removed>/System.dll","<absolute path removed>/mscorlib.dll"],"Framework":"v4.0"}}
2+
{"Kind":"INFO","Data":"Synchronous parsing started"}
3+
{"Kind":"errors","Data":[]}
4+
{"Kind":"INFO","Data":"Synchronous parsing started"}
5+
{"Kind":"errors","Data":[]}
6+
{"Kind":"INFO","Data":"Synchronous parsing started"}
7+
{"Kind":"errors","Data":[]}
8+
{"Kind":"helptext","Data":{"funky":"val funky : x:int -> int"}}
9+
{"Kind":"completion","Data":["funky"]}
10+
{"Kind":"helptext","Data":{"Equals":"System.Object.Equals(obj: obj) : bool"}}
11+
{"Kind":"completion","Data":["Equals","GetHashCode","GetType","Terrific","ToString"]}
12+
{"Kind":"helptext","Data":{"Bar":"union case FileTwo.Foo.Bar: FileTwo.Foo"}}
13+
{"Kind":"completion","Data":["Bar","Foo","NewObjectType","Qux","add","addition"]}
14+
{"Kind":"helptext","Data":{"func":"val func : x:int -> int"}}
15+
{"Kind":"completion","Data":["func"]}
16+
{"Kind":"helptext","Data":{"Bar":"union case FileTwo.Foo.Bar: FileTwo.Foo"}}
17+
{"Kind":"completion","Data":["Bar","Foo","NewObjectType","Qux","add","addition"]}
18+
{"Kind":"tooltip","Data":"val add : x:int -> y:int -> int\n\nFull name: FileTwo.add"}
19+
{"Kind":"tooltip","Data":"val func : x:int -> int\n\nFull name: Program.X.func"}
20+
{"Kind":"tooltip","Data":"val testval : FileTwo.NewObjectType\n\nFull name: Program.testval"}
21+
{"Kind":"tooltip","Data":"val funky : x:int -> int\n\nFull name: Script.XA.funky"}
22+
{"Kind":"finddecl","Data":{"File":"<absolute path removed>/test/integration/Test1Json/FileTwo.fs","Line":13,"Column":11}}
23+
{"Kind":"finddecl","Data":{"File":"<absolute path removed>/test/integration/Test1Json/Script.fsx","Line":4,"Column":6}}
24+
{"Kind":"declarations","Data":[{"Declaration":{"UniqueName":"Program_1_of_1","Name":"Program","Glyph":84,"Kind":{},"Range":{"Item1":{"Line":1,"Column":0,"Encoding":512},"Item2":{"Line":16,"Column":0,"Encoding":8192}},"BodyRange":{"Item1":{"Line":1,"Column":0,"Encoding":512},"Item2":{"Line":15,"Column":5,"Encoding":7685}},"IsSingleTopLevel":true},"Nested":[{"UniqueName":"Program_1_of_1","Name":"main","Glyph":6,"Kind":{},"Range":{"Item1":{"Line":13,"Column":4,"Encoding":6660},"Item2":{"Line":15,"Column":5,"Encoding":7685}},"BodyRange":{"Item1":{"Line":13,"Column":4,"Encoding":6660},"Item2":{"Line":15,"Column":5,"Encoding":7685}},"IsSingleTopLevel":false}]},{"Declaration":{"UniqueName":"X_1_of_1","Name":"X","Glyph":84,"Kind":{},"Range":{"Item1":{"Line":1,"Column":0,"Encoding":512},"Item2":{"Line":2,"Column":20,"Encoding":1044}},"BodyRange":{"Item1":{"Line":1,"Column":8,"Encoding":520},"Item2":{"Line":2,"Column":20,"Encoding":1044}},"IsSingleTopLevel":false},"Nested":[{"UniqueName":"X_1_of_1","Name":"func","Glyph":6,"Kind":{},"Range":{"Item1":{"Line":2,"Column":6,"Encoding":1030},"Item2":{"Line":2,"Column":20,"Encoding":1044}},"BodyRange":{"Item1":{"Line":2,"Column":6,"Encoding":1030},"Item2":{"Line":2,"Column":20,"Encoding":1044}},"IsSingleTopLevel":false}]}]}
25+
{"Kind":"declarations","Data":[{"Declaration":{"UniqueName":"FileTwo_1_of_1","Name":"FileTwo","Glyph":84,"Kind":{},"Range":{"Item1":{"Line":1,"Column":0,"Encoding":512},"Item2":{"Line":14,"Column":5,"Encoding":7173}},"BodyRange":{"Item1":{"Line":1,"Column":14,"Encoding":526},"Item2":{"Line":14,"Column":5,"Encoding":7173}},"IsSingleTopLevel":true},"Nested":[{"UniqueName":"FileTwo_1_of_1","Name":"add","Glyph":6,"Kind":{},"Range":{"Item1":{"Line":9,"Column":4,"Encoding":4612},"Item2":{"Line":9,"Column":19,"Encoding":4627}},"BodyRange":{"Item1":{"Line":9,"Column":4,"Encoding":4612},"Item2":{"Line":9,"Column":19,"Encoding":4627}},"IsSingleTopLevel":false},{"UniqueName":"FileTwo_1_of_1","Name":"addition","Glyph":6,"Kind":{},"Range":{"Item1":{"Line":7,"Column":4,"Encoding":3588},"Item2":{"Line":7,"Column":24,"Encoding":3608}},"BodyRange":{"Item1":{"Line":7,"Column":4,"Encoding":3588},"Item2":{"Line":7,"Column":24,"Encoding":3608}},"IsSingleTopLevel":false}]},{"Declaration":{"UniqueName":"Foo_1_of_1","Name":"Foo","Glyph":132,"Kind":{},"Range":{"Item1":{"Line":3,"Column":5,"Encoding":1541},"Item2":{"Line":5,"Column":7,"Encoding":2567}},"BodyRange":{"Item1":{"Line":4,"Column":2,"Encoding":2050},"Item2":{"Line":5,"Column":7,"Encoding":2567}},"IsSingleTopLevel":false},"Nested":[{"UniqueName":"Foo_1_of_1","Name":"Bar","Glyph":144,"Kind":{},"Range":{"Item1":{"Line":4,"Column":4,"Encoding":2052},"Item2":{"Line":4,"Column":7,"Encoding":2055}},"BodyRange":{"Item1":{"Line":4,"Column":4,"Encoding":2052},"Item2":{"Line":4,"Column":7,"Encoding":2055}},"IsSingleTopLevel":false},{"UniqueName":"Foo_1_of_1","Name":"Qux","Glyph":144,"Kind":{},"Range":{"Item1":{"Line":5,"Column":4,"Encoding":2564},"Item2":{"Line":5,"Column":7,"Encoding":2567}},"BodyRange":{"Item1":{"Line":5,"Column":4,"Encoding":2564},"Item2":{"Line":5,"Column":7,"Encoding":2567}},"IsSingleTopLevel":false}]},{"Declaration":{"UniqueName":"NewObjectType_1_of_1","Name":"NewObjectType","Glyph":0,"Kind":{},"Range":{"Item1":{"Line":11,"Column":5,"Encoding":5637},"Item2":{"Line":14,"Column":5,"Encoding":7173}},"BodyRange":{"Item1":{"Line":13,"Column":2,"Encoding":6658},"Item2":{"Line":14,"Column":5,"Encoding":7173}},"IsSingleTopLevel":false},"Nested":[{"UniqueName":"NewObjectType_1_of_1","Name":"Terrific","Glyph":72,"Kind":{},"Range":{"Item1":{"Line":13,"Column":11,"Encoding":6667},"Item2":{"Line":14,"Column":5,"Encoding":7173}},"BodyRange":{"Item1":{"Line":13,"Column":11,"Encoding":6667},"Item2":{"Line":14,"Column":5,"Encoding":7173}},"IsSingleTopLevel":false}]}]}
26+
{"Kind":"declarations","Data":[{"Declaration":{"UniqueName":"Script_1_of_1","Name":"Script","Glyph":84,"Kind":{},"Range":{"Item1":{"Line":3,"Column":0,"Encoding":1536},"Item2":{"Line":7,"Column":0,"Encoding":3584}},"BodyRange":{"Item1":{"Line":1,"Column":0,"Encoding":512},"Item2":{"Line":4,"Column":21,"Encoding":2069}},"IsSingleTopLevel":true},"Nested":[]},{"Declaration":{"UniqueName":"XA_1_of_1","Name":"XA","Glyph":84,"Kind":{},"Range":{"Item1":{"Line":3,"Column":0,"Encoding":1536},"Item2":{"Line":4,"Column":21,"Encoding":2069}},"BodyRange":{"Item1":{"Line":3,"Column":9,"Encoding":1545},"Item2":{"Line":4,"Column":21,"Encoding":2069}},"IsSingleTopLevel":false},"Nested":[{"UniqueName":"XA_1_of_1","Name":"funky","Glyph":6,"Kind":{},"Range":{"Item1":{"Line":4,"Column":6,"Encoding":2054},"Item2":{"Line":4,"Column":21,"Encoding":2069}},"BodyRange":{"Item1":{"Line":4,"Column":6,"Encoding":2054},"Item2":{"Line":4,"Column":21,"Encoding":2069}},"IsSingleTopLevel":false}]}]}

autocomplete/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.DS_Store
2+
npm-debug.log
3+
node_modules

autocomplete/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## 0.1.0 - First Release
2+
* Every feature added
3+
* Every bug fixed

0 commit comments

Comments
 (0)