├── .gitattributes
├── .github
└── ISSUE_TEMPLATE.md
├── .gitignore
├── .ionide.debug
├── .paket
├── paket.bootstrapper.exe
└── paket.targets
├── .travis.yml
├── FsInteractiveService.sln
├── LICENSE.txt
├── README.md
├── RELEASE_NOTES.md
├── appveyor.yml
├── build.cmd
├── build.fsx
├── build.sh
├── docs
├── content
│ ├── htmlprinter.fsx
│ ├── http.fsx
│ ├── index.fsx
│ └── intelli.fsx
├── files
│ └── img
│ │ ├── atom.png
│ │ ├── logo-template.pdn
│ │ └── logo.png
└── tools
│ ├── generate.fsx
│ └── templates
│ └── template.cshtml
├── paket.dependencies
├── paket.lock
├── src
├── FsInteractiveService.Shared
│ ├── AssemblyInfo.fs
│ ├── Completions.fs
│ ├── Extensions.fs
│ ├── FSharpSymbolHelper.fs
│ ├── FsInteractiveService.Shared.fsproj
│ ├── KeywordList.fs
│ ├── Lexer.fs
│ ├── ParameterHinting.fs
│ ├── Parser.fs
│ ├── paket.references
│ └── paket.template
└── FsInteractiveService
│ ├── App.config
│ ├── AssemblyInfo.fs
│ ├── FsInteractiveService.fsproj
│ ├── Main.fs
│ ├── paket.references
│ └── paket.template
└── tests
└── FsInteractiveService.Tests
├── App.config
├── FsInteractiveService.Tests.fsproj
├── Tests.fs
└── paket.references
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp text=auto eol=lf
6 | *.vb diff=csharp text=auto eol=lf
7 | *.fs diff=csharp text=auto eol=lf
8 | *.fsi diff=csharp text=auto eol=lf
9 | *.fsx diff=csharp text=auto eol=lf
10 | *.sln text eol=crlf merge=union
11 | *.csproj merge=union
12 | *.vbproj merge=union
13 | *.fsproj merge=union
14 | *.dbproj merge=union
15 |
16 | # Standard to msysgit
17 | *.doc diff=astextplain
18 | *.DOC diff=astextplain
19 | *.docx diff=astextplain
20 | *.DOCX diff=astextplain
21 | *.dot diff=astextplain
22 | *.DOT diff=astextplain
23 | *.pdf diff=astextplain
24 | *.PDF diff=astextplain
25 | *.rtf diff=astextplain
26 | *.RTF diff=astextplain
27 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ### Description
2 |
3 | Please provide a succinct description of your issue.
4 |
5 | ### Repro steps
6 |
7 | Please provide the steps required to reproduce the problem
8 |
9 | 1. Step A
10 |
11 | 2. Step B
12 |
13 | ### Expected behavior
14 |
15 | Please provide a description of the behavior you expect.
16 |
17 | ### Actual behavior
18 |
19 | Please provide a description of the actual behavior you observe.
20 |
21 | ### Known workarounds
22 |
23 | Please provide a description of any known workarounds.
24 |
25 | ### Related information
26 |
27 | * Operating system
28 | * Branch
29 | * .NET Runtime, CoreCLR or Mono Version
30 | * Performance information, links to performance testing scripts
31 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.sln.docstates
8 |
9 | # Xamarin Studio / monodevelop user-specific
10 | *.userprefs
11 | *.dll.mdb
12 | *.exe.mdb
13 |
14 | # Build results
15 |
16 | [Dd]ebug/
17 | [Rr]elease/
18 | x64/
19 | build/
20 | [Bb]in/
21 | [Oo]bj/
22 |
23 | # MSTest test Results
24 | [Tt]est[Rr]esult*/
25 | [Bb]uild[Ll]og.*
26 |
27 | *_i.c
28 | *_p.c
29 | *.ilk
30 | *.meta
31 | *.obj
32 | *.pch
33 | *.pdb
34 | *.pgc
35 | *.pgd
36 | *.rsp
37 | *.sbr
38 | *.tlb
39 | *.tli
40 | *.tlh
41 | *.tmp
42 | *.tmp_proj
43 | *.log
44 | *.vspscc
45 | *.vssscc
46 | .builds
47 | *.pidb
48 | *.log
49 | *.scc
50 |
51 | # Visual C++ cache files
52 | ipch/
53 | *.aps
54 | *.ncb
55 | *.opensdf
56 | *.sdf
57 | *.cachefile
58 |
59 | # Visual Studio profiler
60 | *.psess
61 | *.vsp
62 | *.vspx
63 |
64 | # Other Visual Studio data
65 | .vs/
66 |
67 | # Guidance Automation Toolkit
68 | *.gpState
69 |
70 | # ReSharper is a .NET coding add-in
71 | _ReSharper*/
72 | *.[Rr]e[Ss]harper
73 |
74 | # TeamCity is a build add-in
75 | _TeamCity*
76 |
77 | # DotCover is a Code Coverage Tool
78 | *.dotCover
79 |
80 | # NCrunch
81 | *.ncrunch*
82 | .*crunch*.local.xml
83 |
84 | # Installshield output folder
85 | [Ee]xpress/
86 |
87 | # DocProject is a documentation generator add-in
88 | DocProject/buildhelp/
89 | DocProject/Help/*.HxT
90 | DocProject/Help/*.HxC
91 | DocProject/Help/*.hhc
92 | DocProject/Help/*.hhk
93 | DocProject/Help/*.hhp
94 | DocProject/Help/Html2
95 | DocProject/Help/html
96 |
97 | # Click-Once directory
98 | publish/
99 |
100 | # Publish Web Output
101 | *.Publish.xml
102 |
103 | # Enable nuget.exe in the .nuget folder (though normally executables are not tracked)
104 | !.nuget/NuGet.exe
105 |
106 | # Windows Azure Build Output
107 | csx
108 | *.build.csdef
109 |
110 | # Windows Store app package directory
111 | AppPackages/
112 |
113 | # Others
114 | sql/
115 | *.Cache
116 | ClientBin/
117 | [Ss]tyle[Cc]op.*
118 | ~$*
119 | *~
120 | *.dbmdl
121 | *.[Pp]ublish.xml
122 | *.pfx
123 | *.publishsettings
124 |
125 | # RIA/Silverlight projects
126 | Generated_Code/
127 |
128 | # Backup & report files from converting an old project file to a newer
129 | # Visual Studio version. Backup files are not needed, because we have git ;-)
130 | _UpgradeReport_Files/
131 | Backup*/
132 | UpgradeLog*.XML
133 | UpgradeLog*.htm
134 |
135 | # SQL Server files
136 | App_Data/*.mdf
137 | App_Data/*.ldf
138 |
139 |
140 | #LightSwitch generated files
141 | GeneratedArtifacts/
142 | _Pvt_Extensions/
143 | ModelManifest.xml
144 |
145 | # =========================
146 | # Windows detritus
147 | # =========================
148 |
149 | # Windows image file caches
150 | Thumbs.db
151 | ehthumbs.db
152 |
153 | # Folder config file
154 | Desktop.ini
155 |
156 | # Recycle Bin used on file shares
157 | $RECYCLE.BIN/
158 |
159 | # Mac desktop service store files
160 | .DS_Store
161 |
162 | # ===================================================
163 | # Exclude F# project specific directories and files
164 | # ===================================================
165 |
166 | # NuGet Packages Directory
167 | packages/
168 |
169 | # Generated documentation folder
170 | docs/output/
171 |
172 | # Temp folder used for publishing docs
173 | temp/
174 |
175 | # Test results produced by build
176 | TestResults.xml
177 |
178 | # Nuget outputs
179 | nuget/*.nupkg
180 | release.cmd
181 | release.sh
182 | localpackages/
183 | paket-files
184 | *.orig
185 | .paket/paket.exe
186 | docs/content/license.md
187 | docs/content/release-notes.md
188 | .fake
189 | docs/tools/FSharp.Formatting.svclog
190 | TestResult.xml
191 | *.bak
192 | lib
--------------------------------------------------------------------------------
/.ionide.debug:
--------------------------------------------------------------------------------
1 | [20:05:11] SERVICE
2 | Sending request: [object Object]
3 | [20:05:14] SERVICE
4 | Sending request: [object Object]
5 | [20:05:18] SERVICE
6 | Got 'errors': [object Object]
7 | [20:05:18] SERVICE
8 | Sending request: [object Object]
9 | [20:05:18] SERVICE
10 | Got 'errors': [object Object]
11 | [20:05:18] SERVICE
12 | Sending request: [object Object]
13 | [20:05:18] SERVICE
14 | Got 'lint': [object Object]
15 | [20:05:18] SERVICE
16 | Got 'lint': [object Object]
17 | [20:22:48] SERVICE
18 | Sending request: [object Object]
19 | [20:22:48] SERVICE
20 | Sending request: [object Object]
21 | [20:22:48] SERVICE
22 | Sending request: [object Object]
23 | [20:22:49] SERVICE
24 | Got 'error': [object Object]
25 | [20:22:49] SERVICE
26 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\docs\\content\\index.fsx' not parsed"}': [object Object]
27 | [20:22:49] SERVICE
28 | Sending request: [object Object]
29 | [20:22:49] SERVICE
30 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\docs\\content\\index.fsx' not parsed"}': [object Object]
31 | [20:22:49] SERVICE
32 | Got 'error': [object Object]
33 | [20:22:49] SERVICE
34 | Got 'error': [object Object]
35 | [20:22:49] SERVICE
36 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\docs\\content\\index.fsx' not parsed"}': [object Object]
37 | [20:22:49] SERVICE
38 | Got 'errors': [object Object]
39 | [20:22:49] SERVICE
40 | Sending request: [object Object]
41 | [20:22:49] SERVICE
42 | Got 'lint': [object Object]
43 | [20:22:51] SERVICE
44 | Sending request: [object Object]
45 | [20:22:51] SERVICE
46 | Sending request: [object Object]
47 | [20:22:51] SERVICE
48 | Sending request: [object Object]
49 | [20:22:51] SERVICE
50 | Got 'errors': [object Object]
51 | [20:22:51] SERVICE
52 | Sending request: [object Object]
53 | [20:22:51] SERVICE
54 | Got 'lint': [object Object]
55 | [20:22:51] SERVICE
56 | Got 'info': [object Object]
57 | [20:22:51] SERVICE
58 | Received info event '{"Kind":"info","Data":"No symbol information found"}': [object Object]
59 | [20:22:51] SERVICE
60 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
61 | [20:22:51] SERVICE
62 | Got 'info': [object Object]
63 | [20:22:51] SERVICE
64 | Sending request: [object Object]
65 | [20:22:51] SERVICE
66 | Sending request: [object Object]
67 | [20:22:51] SERVICE
68 | Got 'info': [object Object]
69 | [20:22:51] SERVICE
70 | Received info event '{"Kind":"info","Data":"No symbol information found"}': [object Object]
71 | [20:22:51] SERVICE
72 | Got 'info': [object Object]
73 | [20:22:51] SERVICE
74 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
75 | [20:22:52] SERVICE
76 | Sending request: [object Object]
77 | [20:22:52] SERVICE
78 | Sending request: [object Object]
79 | [20:22:52] SERVICE
80 | Got 'info': [object Object]
81 | [20:22:52] SERVICE
82 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
83 | [20:22:52] SERVICE
84 | Got 'info': [object Object]
85 | [20:22:52] SERVICE
86 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
87 | [20:22:52] SERVICE
88 | Sending request: [object Object]
89 | [20:22:52] SERVICE
90 | Sending request: [object Object]
91 | [20:22:52] SERVICE
92 | Got 'info': [object Object]
93 | [20:22:52] SERVICE
94 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
95 | [20:22:52] SERVICE
96 | Got 'info': [object Object]
97 | [20:22:52] SERVICE
98 | Received info event '{"Kind":"info","Data":"No symbol information found"}': [object Object]
99 | [20:22:52] SERVICE
100 | Sending request: [object Object]
101 | [20:22:52] SERVICE
102 | Sending request: [object Object]
103 | [20:22:52] SERVICE
104 | Got 'info': [object Object]
105 | [20:22:52] SERVICE
106 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
107 | [20:22:52] SERVICE
108 | Got 'info': [object Object]
109 | [20:22:52] SERVICE
110 | Received info event '{"Kind":"info","Data":"No symbol information found"}': [object Object]
111 | [20:22:53] SERVICE
112 | Sending request: [object Object]
113 | [20:22:53] SERVICE
114 | Sending request: [object Object]
115 | [20:22:53] SERVICE
116 | Sending request: [object Object]
117 | [20:22:53] SERVICE
118 | Got 'info': [object Object]
119 | [20:22:53] SERVICE
120 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
121 | [20:22:53] SERVICE
122 | Got 'info': [object Object]
123 | [20:22:53] SERVICE
124 | Received info event '{"Kind":"info","Data":"No symbol information found"}': [object Object]
125 | [20:22:53] SERVICE
126 | Got 'errors': [object Object]
127 | [20:22:53] SERVICE
128 | Sending request: [object Object]
129 | [20:22:53] SERVICE
130 | Got 'lint': [object Object]
131 | [20:22:53] SERVICE
132 | Sending request: [object Object]
133 | [20:22:53] SERVICE
134 | Sending request: [object Object]
135 | [20:22:53] SERVICE
136 | Got 'info': [object Object]
137 | [20:22:53] SERVICE
138 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
139 | [20:22:53] SERVICE
140 | Got 'info': [object Object]
141 | [20:22:53] SERVICE
142 | Received info event '{"Kind":"info","Data":"No symbol information found"}': [object Object]
143 | [20:22:54] SERVICE
144 | Sending request: [object Object]
145 | [20:22:54] SERVICE
146 | Sending request: [object Object]
147 | [20:22:54] SERVICE
148 | Sending request: [object Object]
149 | [20:22:54] SERVICE
150 | Got 'info': [object Object]
151 | [20:22:54] SERVICE
152 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
153 | [20:22:54] SERVICE
154 | Got 'info': [object Object]
155 | [20:22:54] SERVICE
156 | Received info event '{"Kind":"info","Data":"No symbol information found"}': [object Object]
157 | [20:22:54] SERVICE
158 | Got 'errors': [object Object]
159 | [20:22:54] SERVICE
160 | Sending request: [object Object]
161 | [20:22:54] SERVICE
162 | Got 'lint': [object Object]
163 | [20:22:55] SERVICE
164 | Sending request: [object Object]
165 | [20:22:55] SERVICE
166 | Sending request: [object Object]
167 | [20:22:55] SERVICE
168 | Got 'info': [object Object]
169 | [20:22:55] SERVICE
170 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
171 | [20:22:55] SERVICE
172 | Got 'info': [object Object]
173 | [20:22:55] SERVICE
174 | Received info event '{"Kind":"info","Data":"No symbol information found"}': [object Object]
175 | [20:22:55] SERVICE
176 | Sending request: [object Object]
177 | [20:22:55] SERVICE
178 | Sending request: [object Object]
179 | [20:22:55] SERVICE
180 | Sending request: [object Object]
181 | [20:22:55] SERVICE
182 | Got 'info': [object Object]
183 | [20:22:55] SERVICE
184 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
185 | [20:22:55] SERVICE
186 | Got 'info': [object Object]
187 | [20:22:55] SERVICE
188 | Received info event '{"Kind":"info","Data":"No symbol information found"}': [object Object]
189 | [20:22:55] SERVICE
190 | Got 'errors': [object Object]
191 | [20:22:55] SERVICE
192 | Sending request: [object Object]
193 | [20:22:55] SERVICE
194 | Got 'lint': [object Object]
195 | [20:22:55] SERVICE
196 | Sending request: [object Object]
197 | [20:22:55] SERVICE
198 | Sending request: [object Object]
199 | [20:22:55] SERVICE
200 | Got 'info': [object Object]
201 | [20:22:55] SERVICE
202 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
203 | [20:22:55] SERVICE
204 | Got 'info': [object Object]
205 | [20:22:55] SERVICE
206 | Received info event '{"Kind":"info","Data":"No symbol information found"}': [object Object]
207 | [20:22:56] SERVICE
208 | Sending request: [object Object]
209 | [20:22:56] SERVICE
210 | Sending request: [object Object]
211 | [20:22:56] SERVICE
212 | Sending request: [object Object]
213 | [20:22:56] SERVICE
214 | Got 'info': [object Object]
215 | [20:22:56] SERVICE
216 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
217 | [20:22:56] SERVICE
218 | Sending request: [object Object]
219 | [20:22:56] SERVICE
220 | Got 'info': [object Object]
221 | [20:22:56] SERVICE
222 | Received info event '{"Kind":"info","Data":"No symbol information found"}': [object Object]
223 | [20:22:56] SERVICE
224 | Got 'errors': [object Object]
225 | [20:22:56] SERVICE
226 | Sending request: [object Object]
227 | [20:22:56] SERVICE
228 | Got 'errors': [object Object]
229 | [20:22:56] SERVICE
230 | Sending request: [object Object]
231 | [20:22:56] SERVICE
232 | Got 'lint': [object Object]
233 | [20:22:56] SERVICE
234 | Got 'lint': [object Object]
235 | [20:22:56] SERVICE
236 | Sending request: [object Object]
237 | [20:22:56] SERVICE
238 | Got 'errors': [object Object]
239 | [20:22:56] SERVICE
240 | Sending request: [object Object]
241 | [20:22:56] SERVICE
242 | Got 'lint': [object Object]
243 | [20:22:58] SERVICE
244 | Sending request: [object Object]
245 | [20:22:58] SERVICE
246 | Sending request: [object Object]
247 | [20:22:58] SERVICE
248 | Got 'info': [object Object]
249 | [20:22:58] SERVICE
250 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
251 | [20:22:58] SERVICE
252 | Got 'info': [object Object]
253 | [20:22:58] SERVICE
254 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
255 | [20:27:53] SERVICE
256 | Sending request: [object Object]
257 | [20:27:54] SERVICE
258 | Sending request: [object Object]
259 | [20:27:54] SERVICE
260 | Sending request: [object Object]
261 | [20:27:54] SERVICE
262 | Sending request: [object Object]
263 | [20:27:54] SERVICE
264 | Got 'error': [object Object]
265 | [20:27:54] SERVICE
266 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
267 | [20:27:54] SERVICE
268 | Got 'error': [object Object]
269 | [20:27:54] SERVICE
270 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
271 | [20:27:54] SERVICE
272 | Got 'error': [object Object]
273 | [20:27:54] SERVICE
274 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
275 | [20:27:55] SERVICE
276 | Sending request: [object Object]
277 | [20:27:55] SERVICE
278 | Got 'error': [object Object]
279 | [20:27:55] SERVICE
280 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
281 | [20:27:55] SERVICE
282 | Sending request: [object Object]
283 | [20:27:55] SERVICE
284 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
285 | [20:27:55] SERVICE
286 | Sending request: [object Object]
287 | [20:27:55] SERVICE
288 | Got 'error': [object Object]
289 | [20:27:55] SERVICE
290 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
291 | [20:27:55] SERVICE
292 | Got 'error': [object Object]
293 | [20:27:55] SERVICE
294 | Sending request: [object Object]
295 | [20:27:55] SERVICE
296 | Sending request: [object Object]
297 | [20:27:55] SERVICE
298 | Got 'error': [object Object]
299 | [20:27:55] SERVICE
300 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
301 | [20:27:55] SERVICE
302 | Got 'error': [object Object]
303 | [20:27:55] SERVICE
304 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
305 | [20:27:56] SERVICE
306 | Sending request: [object Object]
307 | [20:27:56] SERVICE
308 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
309 | [20:27:56] SERVICE
310 | Got 'error': [object Object]
311 | [20:27:56] SERVICE
312 | Sending request: [object Object]
313 | [20:27:56] SERVICE
314 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
315 | [20:27:56] SERVICE
316 | Got 'error': [object Object]
317 | [20:27:57] SERVICE
318 | Sending request: [object Object]
319 | [20:27:57] SERVICE
320 | Sending request: [object Object]
321 | [20:27:57] SERVICE
322 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
323 | [20:27:57] SERVICE
324 | Got 'error': [object Object]
325 | [20:27:57] SERVICE
326 | Sending request: [object Object]
327 | [20:27:57] SERVICE
328 | Got 'error': [object Object]
329 | [20:27:57] SERVICE
330 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
331 | [20:27:59] SERVICE
332 | Got 'errors': [object Object]
333 | [20:27:59] SERVICE
334 | Sending request: [object Object]
335 | [20:27:59] SERVICE
336 | Got 'errors': [object Object]
337 | [20:27:59] SERVICE
338 | Sending request: [object Object]
339 | [20:27:59] SERVICE
340 | Got 'lint': [object Object]
341 | [20:27:59] SERVICE
342 | Got 'lint': [object Object]
343 | [20:28:46] SERVICE
344 | Sending request: [object Object]
345 | [20:28:47] SERVICE
346 | Got 'tooltip': [object Object]
347 | [20:30:34] SERVICE
348 | Sending request: [object Object]
349 | [20:30:34] SERVICE
350 | Got 'info': [object Object]
351 | [20:30:34] SERVICE
352 | Received info event '{"Kind":"info","Data":"No tooltip information"}': [object Object]
353 | [20:31:04] SERVICE
354 | Sending request: [object Object]
355 | [20:31:04] SERVICE
356 | Got 'info': [object Object]
357 | [20:31:04] SERVICE
358 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
359 | [20:31:49] SERVICE
360 | Sending request: [object Object]
361 | [20:31:49] SERVICE
362 | Sending request: [object Object]
363 | [20:31:49] SERVICE
364 | Sending request: [object Object]
365 | [20:31:49] SERVICE
366 | Sending request: [object Object]
367 | [20:31:49] SERVICE
368 | Sending request: [object Object]
369 | [20:31:49] SERVICE
370 | Sending request: [object Object]
371 | [20:31:49] SERVICE
372 | Got 'error': [object Object]
373 | [20:31:49] SERVICE
374 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
375 | [20:31:49] SERVICE
376 | Got 'error': [object Object]
377 | [20:31:49] SERVICE
378 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
379 | [20:31:49] SERVICE
380 | Got 'error': [object Object]
381 | [20:31:49] SERVICE
382 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
383 | [20:31:49] SERVICE
384 | Got 'error': [object Object]
385 | [20:31:49] SERVICE
386 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
387 | [20:31:49] SERVICE
388 | Got 'error': [object Object]
389 | [20:31:49] SERVICE
390 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
391 | [20:31:50] SERVICE
392 | Sending request: [object Object]
393 | [20:31:50] SERVICE
394 | Sending request: [object Object]
395 | [20:31:50] SERVICE
396 | Got 'error': [object Object]
397 | [20:31:50] SERVICE
398 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
399 | [20:31:50] SERVICE
400 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
401 | [20:31:50] SERVICE
402 | Got 'error': [object Object]
403 | [20:31:51] SERVICE
404 | Sending request: [object Object]
405 | [20:31:51] SERVICE
406 | Got 'error': [object Object]
407 | [20:31:51] SERVICE
408 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
409 | [20:31:51] SERVICE
410 | Sending request: [object Object]
411 | [20:31:51] SERVICE
412 | Sending request: [object Object]
413 | [20:31:51] SERVICE
414 | Got 'error': [object Object]
415 | [20:31:51] SERVICE
416 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
417 | [20:31:51] SERVICE
418 | Got 'error': [object Object]
419 | [20:31:51] SERVICE
420 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
421 | [20:31:52] SERVICE
422 | Sending request: [object Object]
423 | [20:31:52] SERVICE
424 | Sending request: [object Object]
425 | [20:31:52] SERVICE
426 | Got 'error': [object Object]
427 | [20:31:52] SERVICE
428 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
429 | [20:31:52] SERVICE
430 | Got 'error': [object Object]
431 | [20:31:52] SERVICE
432 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
433 | [20:31:52] SERVICE
434 | Sending request: [object Object]
435 | [20:31:52] SERVICE
436 | Sending request: [object Object]
437 | [20:31:52] SERVICE
438 | Got 'error': [object Object]
439 | [20:31:52] SERVICE
440 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
441 | [20:31:52] SERVICE
442 | Got 'error': [object Object]
443 | [20:31:52] SERVICE
444 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
445 | [20:31:53] SERVICE
446 | Sending request: [object Object]
447 | [20:31:53] SERVICE
448 | Sending request: [object Object]
449 | [20:31:53] SERVICE
450 | Got 'error': [object Object]
451 | [20:31:53] SERVICE
452 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
453 | [20:31:53] SERVICE
454 | Got 'error': [object Object]
455 | [20:31:53] SERVICE
456 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
457 | [20:31:54] SERVICE
458 | Got 'errors': [object Object]
459 | [20:31:54] SERVICE
460 | Sending request: [object Object]
461 | [20:31:54] SERVICE
462 | Got 'lint': [object Object]
463 | [20:31:56] SERVICE
464 | Sending request: [object Object]
465 | [20:31:56] SERVICE
466 | Sending request: [object Object]
467 | [20:31:56] SERVICE
468 | Got 'info': [object Object]
469 | [20:31:56] SERVICE
470 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
471 | [20:31:56] SERVICE
472 | Got 'info': [object Object]
473 | [20:31:56] SERVICE
474 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
475 | [20:31:58] SERVICE
476 | Sending request: [object Object]
477 | [20:31:58] SERVICE
478 | Sending request: [object Object]
479 | [20:31:58] SERVICE
480 | Got 'info': [object Object]
481 | [20:31:58] SERVICE
482 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
483 | [20:31:58] SERVICE
484 | Got 'info': [object Object]
485 | [20:31:58] SERVICE
486 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
487 | [20:31:59] SERVICE
488 | Sending request: [object Object]
489 | [20:31:59] SERVICE
490 | Sending request: [object Object]
491 | [20:31:59] SERVICE
492 | Got 'info': [object Object]
493 | [20:31:59] SERVICE
494 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
495 | [20:31:59] SERVICE
496 | Got 'info': [object Object]
497 | [20:31:59] SERVICE
498 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
499 | [20:32:01] SERVICE
500 | Sending request: [object Object]
501 | [20:32:01] SERVICE
502 | Sending request: [object Object]
503 | [20:32:01] SERVICE
504 | Got 'info': [object Object]
505 | [20:32:01] SERVICE
506 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
507 | [20:32:01] SERVICE
508 | Got 'info': [object Object]
509 | [20:32:01] SERVICE
510 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
511 | [20:32:01] SERVICE
512 | Sending request: [object Object]
513 | [20:32:01] SERVICE
514 | Got 'info': [object Object]
515 | [20:32:01] SERVICE
516 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
517 | [20:32:04] SERVICE
518 | Sending request: [object Object]
519 | [20:32:04] SERVICE
520 | Sending request: [object Object]
521 | [20:32:04] SERVICE
522 | Got 'info': [object Object]
523 | [20:32:04] SERVICE
524 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
525 | [20:32:04] SERVICE
526 | Got 'info': [object Object]
527 | [20:32:04] SERVICE
528 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
529 | [20:32:05] SERVICE
530 | Sending request: [object Object]
531 | [20:32:05] SERVICE
532 | Sending request: [object Object]
533 | [20:32:05] SERVICE
534 | Got 'info': [object Object]
535 | [20:32:05] SERVICE
536 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
537 | [20:32:05] SERVICE
538 | Got 'info': [object Object]
539 | [20:32:05] SERVICE
540 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
541 | [20:32:08] SERVICE
542 | Sending request: [object Object]
543 | [20:32:08] SERVICE
544 | Sending request: [object Object]
545 | [20:32:08] SERVICE
546 | Sending request: [object Object]
547 | [20:32:08] SERVICE
548 | Got 'info': [object Object]
549 | [20:32:08] SERVICE
550 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
551 | [20:32:08] SERVICE
552 | Got 'info': [object Object]
553 | [20:32:08] SERVICE
554 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
555 | [20:32:08] SERVICE
556 | Got 'errors': [object Object]
557 | [20:32:08] SERVICE
558 | Sending request: [object Object]
559 | [20:32:08] SERVICE
560 | Got 'lint': [object Object]
561 | [20:32:09] SERVICE
562 | Sending request: [object Object]
563 | [20:32:09] SERVICE
564 | Sending request: [object Object]
565 | [20:32:09] SERVICE
566 | Sending request: [object Object]
567 | [20:32:09] SERVICE
568 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
569 | [20:32:09] SERVICE
570 | Got 'info': [object Object]
571 | [20:32:09] SERVICE
572 | Got 'info': [object Object]
573 | [20:32:09] SERVICE
574 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
575 | [20:32:09] SERVICE
576 | Got 'errors': [object Object]
577 | [20:32:09] SERVICE
578 | Sending request: [object Object]
579 | [20:32:09] SERVICE
580 | Got 'lint': [object Object]
581 | [20:32:10] SERVICE
582 | Sending request: [object Object]
583 | [20:32:10] SERVICE
584 | Sending request: [object Object]
585 | [20:32:10] SERVICE
586 | Got 'info': [object Object]
587 | [20:32:10] SERVICE
588 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
589 | [20:32:10] SERVICE
590 | Got 'info': [object Object]
591 | [20:32:10] SERVICE
592 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
593 | [20:32:11] SERVICE
594 | Sending request: [object Object]
595 | [20:32:11] SERVICE
596 | Sending request: [object Object]
597 | [20:32:11] SERVICE
598 | Got 'info': [object Object]
599 | [20:32:11] SERVICE
600 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
601 | [20:32:11] SERVICE
602 | Got 'info': [object Object]
603 | [20:32:11] SERVICE
604 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
605 | [20:32:11] SERVICE
606 | Sending request: [object Object]
607 | [20:32:11] SERVICE
608 | Received info event '{"Kind":"info","Data":"Cannot find ident for tooltip"}': [object Object]
609 | [20:32:11] SERVICE
610 | Got 'info': [object Object]
611 | [20:32:11] SERVICE
612 | Sending request: [object Object]
613 | [20:32:11] SERVICE
614 | Got 'info': [object Object]
615 | [20:32:11] SERVICE
616 | Received info event '{"Kind":"info","Data":"No ident at this location"}': [object Object]
617 | [20:32:11] SERVICE
618 | Sending request: [object Object]
619 | [20:32:11] SERVICE
620 | Got 'errors': [object Object]
621 | [20:32:11] SERVICE
622 | Sending request: [object Object]
623 | [20:32:11] SERVICE
624 | Got 'lint': [object Object]
625 | [23:42:08] SERVICE
626 | Sending request: [object Object]
627 | [23:42:08] SERVICE
628 | Sending request: [object Object]
629 | [23:42:08] SERVICE
630 | Sending request: [object Object]
631 | [23:42:09] SERVICE
632 | Sending request: [object Object]
633 | [23:42:09] SERVICE
634 | Sending request: [object Object]
635 | [23:42:09] SERVICE
636 | Got 'error': [object Object]
637 | [23:42:09] SERVICE
638 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
639 | [23:42:09] SERVICE
640 | Got 'error': [object Object]
641 | [23:42:09] SERVICE
642 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
643 | [23:42:09] SERVICE
644 | Got 'error': [object Object]
645 | [23:42:09] SERVICE
646 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
647 | [23:42:09] SERVICE
648 | Got 'error': [object Object]
649 | [23:42:09] SERVICE
650 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
651 | [23:42:09] SERVICE
652 | Got 'error': [object Object]
653 | [23:42:09] SERVICE
654 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
655 | [23:42:09] SERVICE
656 | Sending request: [object Object]
657 | [23:42:09] SERVICE
658 | Sending request: [object Object]
659 | [23:42:09] SERVICE
660 | Got 'error': [object Object]
661 | [23:42:09] SERVICE
662 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
663 | [23:42:09] SERVICE
664 | Sending request: [object Object]
665 | [23:42:09] SERVICE
666 | Got 'error': [object Object]
667 | [23:42:09] SERVICE
668 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
669 | [23:42:09] SERVICE
670 | Got 'error': [object Object]
671 | [23:42:09] SERVICE
672 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
673 | [23:42:09] SERVICE
674 | Sending request: [object Object]
675 | [23:42:10] SERVICE
676 | Sending request: [object Object]
677 | [23:42:10] SERVICE
678 | Sending request: [object Object]
679 | [23:42:10] SERVICE
680 | Got 'error': [object Object]
681 | [23:42:10] SERVICE
682 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
683 | [23:42:10] SERVICE
684 | Got 'error': [object Object]
685 | [23:42:10] SERVICE
686 | Received error event '{"Kind":"error","Data":"File 'C:\\Tomas\\Public\\ionide\\FsInteractiveService\\build.fsx' not parsed"}': [object Object]
687 | [23:42:14] SERVICE
688 | Got 'errors': [object Object]
689 | [23:42:14] SERVICE
690 | Sending request: [object Object]
691 | [23:42:15] SERVICE
692 | Got 'lint': [object Object]
693 | [23:42:23] SERVICE
694 | Sending request: [object Object]
695 | [23:42:23] SERVICE
696 | Sending request: [object Object]
697 | [23:42:23] SERVICE
698 | Sending request: [object Object]
699 |
--------------------------------------------------------------------------------
/.paket/paket.bootstrapper.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionide/FsInteractiveService/55713d70a34d5846df57dfd4fb00fe546b94d2c2/.paket/paket.bootstrapper.exe
--------------------------------------------------------------------------------
/.paket/paket.targets:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | true
6 |
7 | true
8 | $(MSBuildThisFileDirectory)
9 | $(MSBuildThisFileDirectory)..\
10 |
11 |
12 |
13 | $(PaketToolsPath)paket.exe
14 | $(PaketToolsPath)paket.bootstrapper.exe
15 | "$(PaketExePath)"
16 | mono --runtime=v4.0.30319 "$(PaketExePath)"
17 | "$(PaketBootStrapperExePath)"
18 | mono --runtime=v4.0.30319 $(PaketBootStrapperExePath)
19 |
20 | $(PaketCommand) restore
21 | $(PaketBootStrapperCommand)
22 |
23 | RestorePackages; $(BuildDependsOn);
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: csharp
2 |
3 | sudo: false # use the new container-based Travis infrastructure
4 |
5 | before_install:
6 | - chmod +x build.sh
7 |
8 | script:
9 | - ./build.sh All
10 |
--------------------------------------------------------------------------------
/FsInteractiveService.sln:
--------------------------------------------------------------------------------
1 | Microsoft Visual Studio Solution File, Format Version 12.00
2 | # Visual Studio 14
3 | VisualStudioVersion = 14.0.23107.0
4 | MinimumVisualStudioVersion = 10.0.40219.1
5 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{63297B98-5CED-492C-A5B7-A5B4F73CF142}"
6 | ProjectSection(SolutionItems) = preProject
7 | paket.dependencies = paket.dependencies
8 | paket.lock = paket.lock
9 | EndProjectSection
10 | EndProject
11 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{A6A6AF7D-D6E3-442D-9B1E-58CC91879BE1}"
12 | EndProject
13 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsInteractiveService", "src\FsInteractiveService\FsInteractiveService.fsproj", "{020F5F39-566E-4604-8DF0-3274671000AF}"
14 | EndProject
15 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "project", "project", "{BF60BC93-E09B-4E5F-9D85-95A519479D54}"
16 | ProjectSection(SolutionItems) = preProject
17 | build.fsx = build.fsx
18 | README.md = README.md
19 | RELEASE_NOTES.md = RELEASE_NOTES.md
20 | EndProjectSection
21 | EndProject
22 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{83F16175-43B1-4C90-A1EE-8E351C33435D}"
23 | ProjectSection(SolutionItems) = preProject
24 | docs\tools\generate.fsx = docs\tools\generate.fsx
25 | docs\tools\templates\template.cshtml = docs\tools\templates\template.cshtml
26 | EndProjectSection
27 | EndProject
28 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "content", "content", "{8E6D5255-776D-4B61-85F9-73C37AA1FB9A}"
29 | ProjectSection(SolutionItems) = preProject
30 | docs\content\htmlprinter.fsx = docs\content\htmlprinter.fsx
31 | docs\content\http.fsx = docs\content\http.fsx
32 | docs\content\index.fsx = docs\content\index.fsx
33 | docs\content\intelli.fsx = docs\content\intelli.fsx
34 | EndProjectSection
35 | EndProject
36 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{ED8079DD-2B06-4030-9F0F-DC548F98E1C4}"
37 | EndProject
38 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsInteractiveService.Tests", "tests\FsInteractiveService.Tests\FsInteractiveService.Tests.fsproj", "{51C80AEF-D584-4E95-991C-FD713A004C3B}"
39 | EndProject
40 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsInteractiveService.Shared", "src\FsInteractiveService.Shared\FsInteractiveService.Shared.fsproj", "{AF5FEAD5-B50E-4F07-A274-32F23D5C504D}"
41 | EndProject
42 | Global
43 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
44 | Debug|Any CPU = Debug|Any CPU
45 | Release|Any CPU = Release|Any CPU
46 | EndGlobalSection
47 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
48 | {020F5F39-566E-4604-8DF0-3274671000AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
49 | {020F5F39-566E-4604-8DF0-3274671000AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
50 | {020F5F39-566E-4604-8DF0-3274671000AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
51 | {020F5F39-566E-4604-8DF0-3274671000AF}.Release|Any CPU.Build.0 = Release|Any CPU
52 | {51C80AEF-D584-4E95-991C-FD713A004C3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
53 | {51C80AEF-D584-4E95-991C-FD713A004C3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
54 | {51C80AEF-D584-4E95-991C-FD713A004C3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
55 | {51C80AEF-D584-4E95-991C-FD713A004C3B}.Release|Any CPU.Build.0 = Release|Any CPU
56 | {AF5FEAD5-B50E-4F07-A274-32F23D5C504D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
57 | {AF5FEAD5-B50E-4F07-A274-32F23D5C504D}.Debug|Any CPU.Build.0 = Debug|Any CPU
58 | {AF5FEAD5-B50E-4F07-A274-32F23D5C504D}.Release|Any CPU.ActiveCfg = Release|Any CPU
59 | {AF5FEAD5-B50E-4F07-A274-32F23D5C504D}.Release|Any CPU.Build.0 = Release|Any CPU
60 | EndGlobalSection
61 | GlobalSection(SolutionProperties) = preSolution
62 | HideSolutionNode = FALSE
63 | EndGlobalSection
64 | GlobalSection(NestedProjects) = preSolution
65 | {83F16175-43B1-4C90-A1EE-8E351C33435D} = {A6A6AF7D-D6E3-442D-9B1E-58CC91879BE1}
66 | {8E6D5255-776D-4B61-85F9-73C37AA1FB9A} = {A6A6AF7D-D6E3-442D-9B1E-58CC91879BE1}
67 | {51C80AEF-D584-4E95-991C-FD713A004C3B} = {ED8079DD-2B06-4030-9F0F-DC548F98E1C4}
68 | EndGlobalSection
69 | EndGlobal
70 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | This is free and unencumbered software released into the public domain.
2 |
3 | Anyone is free to copy, modify, publish, use, compile, sell, or
4 | distribute this software, either in source code form or as a compiled
5 | binary, for any purpose, commercial or non-commercial, and by any
6 | means.
7 |
8 | In jurisdictions that recognize copyright laws, the author or authors
9 | of this software dedicate any and all copyright interest in the
10 | software to the public domain. We make this dedication for the benefit
11 | of the public at large and to the detriment of our heirs and
12 | successors. We intend this dedication to be an overt act of
13 | relinquishment in perpetuity of all present and future rights to this
14 | software under copyright law.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | OTHER DEALINGS IN THE SOFTWARE.
23 |
24 | For more information, please refer to
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://travis-ci.org/ionide/FsInteractiveService)
2 |
3 | # FsInteractiveService
4 |
5 | The FsInteractiveService project provides a simple layer over the F# Interactive services
6 | from the [F# Compiler Services project](http://fsharp.github.io/FSharp.Compiler.Services). It makes the
7 | service available as a stand-alone process that can be started and called via HTTP requests. It is very
8 | similar to the [FsAutoComplete](https://github.com/fsharp/FsAutoComplete/) project, which provides similar
9 | out-of-process wrapper for F# Compiler IDE services.
10 |
11 | The FsInteractiveService project can be used to build F# Interactive editor integration for editors
12 | that are not based on .NET such as Atom.
13 |
14 | Documentation
15 | -------------
16 |
17 | * [F# Interactive Service home](http://ionide.io/FsInteractiveService) is the homepage for the project.
18 | Go here to get started with FsInteractiveService.
19 |
20 | * [Creating HTML printers](http://ionide.io/FsInteractiveService/htmlprinter.html) discusses an extension that
21 | F# Interactive Service provides for formatting values as HTML objects. This can be done by registering a
22 | printer using `fsi.AddHtmlPrinter`.
23 |
24 | * [Evaluating snippets via HTTP API](http://ionide.io/FsInteractiveService/http.html) shows how to start the
25 | `FsInteractiveService.exe` process in background and how to communicate with it using REST-based API over
26 | network. It shows different commands you can send and responses you'll get back.
27 |
28 | * [Getting IntelliSense info via HTTP PI](http://ionide.io/FsInteractiveService/intelli.html) discusses
29 | IntelliSense functionality exposed by the `FsInteractiveService.exe` process. This lets you get auto-completion
30 | in F# Interactive, access tooltips for objects in completion lists and get hints on method parameters.
31 |
--------------------------------------------------------------------------------
/RELEASE_NOTES.md:
--------------------------------------------------------------------------------
1 | #### 0.2.1 - June 7, 2016
2 | * ILRepack Newtonsoft.Json (to avoid loading it twice when used by users)
3 | * Use renamed version of Suave to avoid assembly loading clashes
4 |
5 | #### 0.2.0 - May 31, 2016
6 | * Change AddHtmlPrinter to support FsLab Journal integration
7 |
8 | #### 0.1.2 - May 23, 2016
9 | * Updated GitHub release
10 |
11 | #### 0.1.0 - May 23, 2016
12 | * Initial release of the FsInteractiveService NuGet package
13 |
--------------------------------------------------------------------------------
/appveyor.yml:
--------------------------------------------------------------------------------
1 | init:
2 | - git config --global core.autocrlf input
3 | build_script:
4 | - cmd: build.cmd
5 | test: off
6 | version: 0.0.1.{build}
7 | artifacts:
8 | - path: bin
9 | name: bin
10 |
--------------------------------------------------------------------------------
/build.cmd:
--------------------------------------------------------------------------------
1 | @echo off
2 | cls
3 |
4 | .paket\paket.bootstrapper.exe prerelease
5 | if errorlevel 1 (
6 | exit /b %errorlevel%
7 | )
8 |
9 | .paket\paket.exe restore
10 | if errorlevel 1 (
11 | exit /b %errorlevel%
12 | )
13 |
14 | IF NOT EXIST build.fsx (
15 | .paket\paket.exe update
16 | packages\build\FAKE\tools\FAKE.exe init.fsx
17 | )
18 | packages\build\FAKE\tools\FAKE.exe build.fsx %*
19 |
--------------------------------------------------------------------------------
/build.fsx:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------------------------------------
2 | // FAKE build script
3 | // --------------------------------------------------------------------------------------
4 |
5 | #r @"packages/build/FAKE/tools/FakeLib.dll"
6 | #r @"packages/build/Mono.Cecil/lib/net45/Mono.Cecil.dll"
7 | open Fake
8 | open Fake.Git
9 | open Fake.AssemblyInfoFile
10 | open Fake.ReleaseNotesHelper
11 | open Fake.UserInputHelper
12 | open System
13 | open System.IO
14 | open Mono.Cecil
15 | #if MONO
16 | #else
17 | #load "packages/build/SourceLink.Fake/tools/Fake.fsx"
18 | open SourceLink
19 | #endif
20 |
21 | // --------------------------------------------------------------------------------------
22 | // START TODO: Provide project-specific details below
23 | // --------------------------------------------------------------------------------------
24 |
25 | // Information about the project are used
26 | // - for version and project name in generated AssemblyInfo file
27 | // - by the generated NuGet package
28 | // - to run tests and to publish documentation on GitHub gh-pages
29 | // - for documentation, you also need to edit info in "docs/tools/generate.fsx"
30 |
31 | // The name of the project
32 | // (used by attributes in AssemblyInfo, name of a NuGet package and directory in 'src')
33 | let project = "FsInteractiveService"
34 |
35 | // Short summary of the project
36 | // (used as description in AssemblyInfo and as a short summary for NuGet package)
37 | let summary = "F# interactive service API exposed via a lightweight HTTP server"
38 |
39 | // Longer description of the project
40 | // (used as a description for NuGet package; line breaks are automatically cleaned up)
41 | let description = "F# interactive API exposed via a lightweight HTTP server"
42 |
43 | // List of author names (for NuGet package)
44 | let authors = [ "Tomas Petricek" ]
45 |
46 | // Tags for your project (for NuGet package)
47 | let tags = "fsi interactive fsharp f# service"
48 |
49 | // Pattern specifying assemblies to be tested using NUnit
50 | let testAssemblies = "tests/**/bin/Release/*Tests*.dll"
51 |
52 | // Git configuration (used for publishing documentation in gh-pages branch)
53 | // The profile where the project is posted
54 | let gitOwner = "ionide"
55 | let gitHome = "https://github.com/" + gitOwner
56 |
57 | // The name of the project on GitHub
58 | let gitName = "FsInteractiveService"
59 |
60 | // The url for the raw files hosted
61 | let gitRaw = environVarOrDefault "gitRaw" "https://raw.github.com/ionide"
62 |
63 | // --------------------------------------------------------------------------------------
64 | // END TODO: The rest of the file includes standard build steps
65 | // --------------------------------------------------------------------------------------
66 |
67 | // Read additional information from the release notes document
68 | System.Environment.CurrentDirectory <- __SOURCE_DIRECTORY__
69 | let release = LoadReleaseNotes "RELEASE_NOTES.md"
70 |
71 | // Helper active pattern for project types
72 | let (|Fsproj|Csproj|Vbproj|Shproj|) (projFileName:string) =
73 | match projFileName with
74 | | f when f.EndsWith("fsproj") -> Fsproj
75 | | f when f.EndsWith("csproj") -> Csproj
76 | | f when f.EndsWith("vbproj") -> Vbproj
77 | | f when f.EndsWith("shproj") -> Shproj
78 | | _ -> failwith (sprintf "Project file %s not supported. Unknown project type." projFileName)
79 |
80 | // Generate assembly info files with the right version & up-to-date information
81 | Target "AssemblyInfo" (fun _ ->
82 | let getAssemblyInfoAttributes projectName =
83 | [ Attribute.Title (projectName)
84 | Attribute.Product project
85 | Attribute.Description summary
86 | Attribute.Version release.AssemblyVersion
87 | Attribute.FileVersion release.AssemblyVersion ]
88 |
89 | let getProjectDetails projectPath =
90 | let projectName = System.IO.Path.GetFileNameWithoutExtension(projectPath)
91 | ( projectPath,
92 | projectName,
93 | System.IO.Path.GetDirectoryName(projectPath),
94 | (getAssemblyInfoAttributes projectName)
95 | )
96 |
97 | !! "src/**/*.??proj"
98 | |> Seq.map getProjectDetails
99 | |> Seq.iter (fun (projFileName, projectName, folderName, attributes) ->
100 | match projFileName with
101 | | Fsproj -> CreateFSharpAssemblyInfo (folderName > "AssemblyInfo.fs") attributes
102 | | Csproj -> CreateCSharpAssemblyInfo ((folderName > "Properties") > "AssemblyInfo.cs") attributes
103 | | Vbproj -> CreateVisualBasicAssemblyInfo ((folderName > "My Project") > "AssemblyInfo.vb") attributes
104 | | Shproj -> ()
105 | )
106 | )
107 |
108 | // Copies binaries from default VS location to expected bin folder
109 | // But keeps a subdirectory structure for each project in the
110 | // src folder to support multiple project outputs
111 | Target "CopyBinaries" (fun _ ->
112 | !! "src/**/*.??proj"
113 | -- "src/**/*.shproj"
114 | |> Seq.map (fun f -> ((System.IO.Path.GetDirectoryName f) > "bin/Release", "bin" > (System.IO.Path.GetFileNameWithoutExtension f)))
115 | |> Seq.iter (fun (fromDir, toDir) -> CopyDir toDir fromDir (fun _ -> true))
116 | )
117 |
118 | // --------------------------------------------------------------------------------------
119 | // Clean build results
120 |
121 | Target "Clean" (fun _ ->
122 | CleanDirs ["bin"; "temp"]
123 | )
124 |
125 | Target "CleanDocs" (fun _ ->
126 | CleanDirs ["docs/output"]
127 | )
128 |
129 | // --------------------------------------------------------------------------------------
130 | // Build library & test project
131 |
132 | Target "RenameDependencies" (fun _ ->
133 | CreateDir "lib"
134 | DeleteFile "lib/FsInteractiveService.Suave.dll"
135 |
136 | let reader = new Mono.Cecil.DefaultAssemblyResolver()
137 | reader.AddSearchDirectory("packages/build/Suave/lib/net40")
138 | reader.AddSearchDirectory("packages/build/FSharp.Core/lib/net40")
139 | let readerParams = new Mono.Cecil.ReaderParameters(AssemblyResolver = reader)
140 | let asem = Mono.Cecil.AssemblyDefinition.ReadAssembly("packages/build/Suave/lib/net40/Suave.dll", readerParams)
141 | asem.Name <- new Mono.Cecil.AssemblyNameDefinition("FsInteractiveService.Suave", new System.Version(1,0,0,0))
142 | asem.Write("lib/FsInteractiveService.Suave.dll")
143 | )
144 |
145 | Target "BuildCore" (fun _ ->
146 | !! "src\FsInteractiveService\FsInteractiveService.fsproj"
147 | |> MSBuildRelease "" "Rebuild"
148 | |> ignore
149 | !! "src\FsInteractiveService.Shared\FsInteractiveService.Shared.fsproj"
150 | |> MSBuildRelease "" "Rebuild"
151 | |> ignore
152 | )
153 |
154 | Target "BuildTests" (fun _ ->
155 | !! "tests\FsInteractiveService.Tests\FsInteractiveService.Tests.fsproj"
156 | |> MSBuildRelease "" "Rebuild"
157 | |> ignore
158 | )
159 |
160 | Target "ILRepack" (fun _ ->
161 | let buildDir = "bin/FsInteractiveService"
162 | let buildMergedDir = "bin/FsInteractiveService.Merged"
163 | CreateDir buildMergedDir
164 |
165 | let internalizeIn filename =
166 | let toPack =
167 | [filename; "Newtonsoft.Json.dll"]
168 | |> List.map (fun l -> buildDir > l)
169 | |> separated " "
170 | let targetFile = buildMergedDir > filename
171 |
172 | let result =
173 | ExecProcess (fun info ->
174 | info.FileName <- currentDirectory > "packages" > "build" > "ILRepack" > "tools" > "ILRepack.exe"
175 | info.Arguments <-
176 | sprintf "/lib:%s /ver:%s /out:%s %s"
177 | buildDir release.AssemblyVersion targetFile toPack) (System.TimeSpan.FromMinutes 5.)
178 |
179 | if result <> 0 then failwithf "Error during ILRepack execution."
180 | CopyFile (buildDir > filename) targetFile
181 |
182 | internalizeIn "FsInteractiveService.exe"
183 | !! (buildDir > "Newtonsoft.Json.**") |> Seq.iter DeleteFile
184 | DeleteDir buildMergedDir
185 | )
186 |
187 | // --------------------------------------------------------------------------------------
188 | // Run the unit tests using test runner
189 |
190 | Target "RunTests" (fun _ ->
191 | !! testAssemblies
192 | |> NUnit (fun p ->
193 | { p with
194 | DisableShadowCopy = true
195 | TimeOut = TimeSpan.FromMinutes 20.
196 | OutputFile = "TestResults.xml" })
197 | )
198 |
199 | #if MONO
200 | #else
201 | // --------------------------------------------------------------------------------------
202 | // SourceLink allows Source Indexing on the PDB generated by the compiler, this allows
203 | // the ability to step through the source code of external libraries http://ctaggart.github.io/SourceLink/
204 |
205 | Target "SourceLink" (fun _ ->
206 | let baseUrl = sprintf "%s/%s/{0}/%%var2%%" gitRaw project
207 | !! "src/**/*.??proj"
208 | -- "src/**/*.shproj"
209 | |> Seq.iter (fun projFile ->
210 | let proj = VsProj.LoadRelease projFile
211 | SourceLink.Index proj.CompilesNotLinked proj.OutputFilePdb __SOURCE_DIRECTORY__ baseUrl
212 | )
213 | )
214 |
215 | #endif
216 |
217 | // --------------------------------------------------------------------------------------
218 | // Build a NuGet package
219 |
220 | Target "NuGet" (fun _ ->
221 | Paket.Pack(fun p ->
222 | { p with
223 | OutputPath = "bin"
224 | Version = release.NugetVersion
225 | ReleaseNotes = toLines release.Notes})
226 | )
227 |
228 | Target "PublishNuget" (fun _ ->
229 | Paket.Push(fun p ->
230 | { p with
231 | WorkingDir = "bin" })
232 | )
233 |
234 |
235 | // --------------------------------------------------------------------------------------
236 | // Generate the documentation
237 |
238 |
239 | let fakePath = "packages" > "build" > "FAKE" > "tools" > "FAKE.exe"
240 | let fakeStartInfo script workingDirectory args fsiargs environmentVars =
241 | (fun (info: System.Diagnostics.ProcessStartInfo) ->
242 | info.FileName <- System.IO.Path.GetFullPath fakePath
243 | info.Arguments <- sprintf "%s --fsiargs -d:FAKE %s \"%s\"" args fsiargs script
244 | info.WorkingDirectory <- workingDirectory
245 | let setVar k v =
246 | info.EnvironmentVariables.[k] <- v
247 | for (k, v) in environmentVars do
248 | setVar k v
249 | setVar "MSBuild" msBuildExe
250 | setVar "GIT" Git.CommandHelper.gitPath
251 | setVar "FSI" fsiPath)
252 |
253 | /// Run the given buildscript with FAKE.exe
254 | let executeFAKEWithOutput workingDirectory script fsiargs envArgs =
255 | let exitCode =
256 | ExecProcessWithLambdas
257 | (fakeStartInfo script workingDirectory "" fsiargs envArgs)
258 | TimeSpan.MaxValue false ignore ignore
259 | System.Threading.Thread.Sleep 1000
260 | exitCode
261 |
262 | // Documentation
263 | let buildDocumentationTarget fsiargs target =
264 | trace (sprintf "Building documentation (%s), this could take some time, please wait..." target)
265 | let exit = executeFAKEWithOutput "docs/tools" "generate.fsx" fsiargs ["target", target]
266 | if exit <> 0 then
267 | failwith "generating reference documentation failed"
268 | ()
269 |
270 | Target "GenerateReferenceDocs" (fun _ ->
271 | buildDocumentationTarget "-d:RELEASE -d:REFERENCE" "Default"
272 | )
273 |
274 | let generateHelp' fail debug =
275 | let args =
276 | if debug then "--define:HELP"
277 | else "--define:RELEASE --define:HELP"
278 | try
279 | buildDocumentationTarget args "Default"
280 | traceImportant "Help generated"
281 | with
282 | | e when not fail ->
283 | traceImportant "generating help documentation failed"
284 |
285 | let generateHelp fail =
286 | generateHelp' fail false
287 |
288 | Target "GenerateHelp" (fun _ ->
289 | DeleteFile "docs/content/release-notes.md"
290 | CopyFile "docs/content/" "RELEASE_NOTES.md"
291 | Rename "docs/content/release-notes.md" "docs/content/RELEASE_NOTES.md"
292 |
293 | DeleteFile "docs/content/license.md"
294 | CopyFile "docs/content/" "LICENSE.txt"
295 | Rename "docs/content/license.md" "docs/content/LICENSE.txt"
296 |
297 | generateHelp true
298 | )
299 |
300 | Target "GenerateHelpDebug" (fun _ ->
301 | DeleteFile "docs/content/release-notes.md"
302 | CopyFile "docs/content/" "RELEASE_NOTES.md"
303 | Rename "docs/content/release-notes.md" "docs/content/RELEASE_NOTES.md"
304 |
305 | DeleteFile "docs/content/license.md"
306 | CopyFile "docs/content/" "LICENSE.txt"
307 | Rename "docs/content/license.md" "docs/content/LICENSE.txt"
308 |
309 | generateHelp' true true
310 | )
311 |
312 | Target "KeepRunning" (fun _ ->
313 | use watcher = !! "docs/content/**/*.*" |> WatchChanges (fun changes ->
314 | generateHelp' true true
315 | )
316 |
317 | traceImportant "Waiting for help edits. Press any key to stop."
318 |
319 | System.Console.ReadKey() |> ignore
320 |
321 | watcher.Dispose()
322 | )
323 |
324 | Target "GenerateDocs" DoNothing
325 |
326 | let createIndexFsx lang =
327 | let content = """(*** hide ***)
328 | // This block of code is omitted in the generated HTML documentation. Use
329 | // it to define helpers that you do not want to show in the documentation.
330 | #I "../../../bin"
331 |
332 | (**
333 | F# Project Scaffold ({0})
334 | =========================
335 | *)
336 | """
337 | let targetDir = "docs/content" > lang
338 | let targetFile = targetDir > "index.fsx"
339 | ensureDirectory targetDir
340 | System.IO.File.WriteAllText(targetFile, System.String.Format(content, lang))
341 |
342 | Target "AddLangDocs" (fun _ ->
343 | let args = System.Environment.GetCommandLineArgs()
344 | if args.Length < 4 then
345 | failwith "Language not specified."
346 |
347 | args.[3..]
348 | |> Seq.iter (fun lang ->
349 | if lang.Length <> 2 && lang.Length <> 3 then
350 | failwithf "Language must be 2 or 3 characters (ex. 'de', 'fr', 'ja', 'gsw', etc.): %s" lang
351 |
352 | let templateFileName = "template.cshtml"
353 | let templateDir = "docs/tools/templates"
354 | let langTemplateDir = templateDir > lang
355 | let langTemplateFileName = langTemplateDir > templateFileName
356 |
357 | if System.IO.File.Exists(langTemplateFileName) then
358 | failwithf "Documents for specified language '%s' have already been added." lang
359 |
360 | ensureDirectory langTemplateDir
361 | Copy langTemplateDir [ templateDir > templateFileName ]
362 |
363 | createIndexFsx lang)
364 | )
365 |
366 | // --------------------------------------------------------------------------------------
367 | // Release Scripts
368 |
369 | Target "ReleaseDocs" (fun _ ->
370 | let tempDocsDir = "temp/gh-pages"
371 | CleanDir tempDocsDir
372 | Repository.cloneSingleBranch "" (gitHome + "/" + gitName + ".git") "gh-pages" tempDocsDir
373 |
374 | CopyRecursive "docs/output" tempDocsDir true |> tracefn "%A"
375 | StageAll tempDocsDir
376 | Git.Commit.Commit tempDocsDir (sprintf "Update generated documentation for version %s" release.NugetVersion)
377 | Branches.push tempDocsDir
378 | )
379 |
380 | #load "paket-files/build/fsharp/FAKE/modules/Octokit/Octokit.fsx"
381 | open Octokit
382 |
383 | Target "ZipRelease" (fun _ ->
384 | !! ("bin/FsInteractiveService/*.*")
385 | -- ("bin/FsInteractiveService/App.config")
386 | |> Zip "bin/FsInteractiveService" ("temp" > "fsinteractiveservice.zip")
387 |
388 | )
389 |
390 | Target "Release" (fun _ ->
391 | let user =
392 | match getBuildParam "github-user" with
393 | | s when not (String.IsNullOrWhiteSpace s) -> s
394 | | _ -> getUserInput "Username: "
395 | let pw =
396 | match getBuildParam "github-pw" with
397 | | s when not (String.IsNullOrWhiteSpace s) -> s
398 | | _ -> getUserPassword "Password: "
399 | let remote =
400 | Git.CommandHelper.getGitResult "" "remote -v"
401 | |> Seq.filter (fun (s: string) -> s.EndsWith("(push)"))
402 | |> Seq.tryFind (fun (s: string) -> s.Contains(gitOwner + "/" + gitName))
403 | |> function None -> gitHome + "/" + gitName | Some (s: string) -> s.Split().[0]
404 |
405 | StageAll ""
406 | Git.Commit.Commit "" (sprintf "Bump version to %s" release.NugetVersion)
407 | Branches.pushBranch "" remote (Information.getBranchName "")
408 |
409 | Branches.tag "" release.NugetVersion
410 | Branches.pushTag "" remote release.NugetVersion
411 |
412 | // release on github
413 | createClient user pw
414 | |> createDraft gitOwner gitName release.NugetVersion (release.SemVer.PreRelease <> None) release.Notes
415 | |> uploadFile "temp/fsinteractiveservice.zip"
416 | |> releaseDraft
417 | |> Async.RunSynchronously
418 | )
419 |
420 | Target "BuildPackage" DoNothing
421 |
422 | // --------------------------------------------------------------------------------------
423 | // Run all targets by default. Invoke 'build ' to override
424 |
425 | Target "All" DoNothing
426 |
427 | "Clean"
428 | ==> "AssemblyInfo"
429 | ==> "RenameDependencies"
430 | ==> "BuildCore"
431 | ==> "CopyBinaries"
432 | ==> "ILRepack"
433 | ==> "BuildTests"
434 | ==> "RunTests"
435 | ==> "All"
436 | ==> "GenerateReferenceDocs"
437 | ==> "GenerateDocs"
438 | =?> ("ReleaseDocs",isLocalBuild)
439 |
440 | "All"
441 | #if MONO
442 | #else
443 | =?> ("SourceLink", Pdbstr.tryFind().IsSome )
444 | #endif
445 | ==> "NuGet"
446 | ==> "BuildPackage"
447 |
448 | "CleanDocs"
449 | ==> "GenerateHelp"
450 | ==> "GenerateReferenceDocs"
451 | ==> "GenerateDocs"
452 |
453 | "CleanDocs"
454 | ==> "GenerateHelpDebug"
455 |
456 | "GenerateHelpDebug"
457 | ==> "KeepRunning"
458 |
459 | "ReleaseDocs"
460 | ==> "ZipRelease"
461 | ==> "Release"
462 |
463 | "BuildPackage"
464 | ==> "PublishNuget"
465 | ==> "Release"
466 |
467 | RunTargetOrDefault "All"
468 |
--------------------------------------------------------------------------------
/build.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -eu
4 | set -o pipefail
5 |
6 | cd `dirname $0`
7 |
8 | PAKET_BOOTSTRAPPER_EXE=.paket/paket.bootstrapper.exe
9 | PAKET_EXE=.paket/paket.exe
10 | FAKE_EXE=packages/build/FAKE/tools/FAKE.exe
11 |
12 | FSIARGS=""
13 | OS=${OS:-"unknown"}
14 | if [[ "$OS" != "Windows_NT" ]]
15 | then
16 | FSIARGS="--fsiargs -d:MONO"
17 | fi
18 |
19 | function run() {
20 | if [[ "$OS" != "Windows_NT" ]]
21 | then
22 | mono "$@"
23 | else
24 | "$@"
25 | fi
26 | }
27 |
28 | function yesno() {
29 | # NOTE: Defaults to NO
30 | read -p "$1 [y/N] " ynresult
31 | case "$ynresult" in
32 | [yY]*) true ;;
33 | *) false ;;
34 | esac
35 | }
36 |
37 | set +e
38 | run $PAKET_BOOTSTRAPPER_EXE prerelease
39 | bootstrapper_exitcode=$?
40 | set -e
41 |
42 | if [[ "$OS" != "Windows_NT" ]] &&
43 | [ $bootstrapper_exitcode -ne 0 ] &&
44 | [ $(certmgr -list -c Trust | grep X.509 | wc -l) -le 1 ] &&
45 | [ $(certmgr -list -c -m Trust | grep X.509 | wc -l) -le 1 ]
46 | then
47 | echo "Your Mono installation has no trusted SSL root certificates set up."
48 | echo "This may result in the Paket bootstrapper failing to download Paket"
49 | echo "because Github's SSL certificate can't be verified. One way to fix"
50 | echo "this issue would be to download the list of SSL root certificates"
51 | echo "from the Mozilla project by running the following command:"
52 | echo ""
53 | echo " mozroots --import --sync"
54 | echo ""
55 | echo "This will import over 100 SSL root certificates into your Mono"
56 | echo "certificate repository."
57 | echo ""
58 | if yesno "Run 'mozroots --import --sync' now?"
59 | then
60 | mozroots --import --sync
61 | else
62 | echo "Attempting to continue without running mozroots. This might fail."
63 | fi
64 | # Re-run bootstrapper whether or not the user ran mozroots, because maybe
65 | # they fixed the problem in a separate terminal window.
66 | run $PAKET_BOOTSTRAPPER_EXE prerelease
67 | fi
68 |
69 | run $PAKET_EXE restore
70 |
71 | [ ! -e build.fsx ] && run $PAKET_EXE update
72 | [ ! -e build.fsx ] && run $FAKE_EXE init.fsx
73 | run $FAKE_EXE "$@" $FSIARGS build.fsx
74 |
75 |
--------------------------------------------------------------------------------
/docs/content/htmlprinter.fsx:
--------------------------------------------------------------------------------
1 | (**
2 | Creating HTML printers
3 | ======================
4 |
5 | The FsInteractiveService project extends F# Interactive with a feature that makes
6 | it possible to format objects as HTML. This follows very similar pattern to the
7 | `fsi.AddPrinter` function available in F# by default.
8 |
9 | The code that gets sent to FsInteractiveService can use an extension `fsi.AddHtmlPrinter`.
10 | The process also defines a `HAS_FSI_ADDHTMLPRINTER` symbol, so that you can detect whether
11 | the feature is available.
12 |
13 | Formatting HTML tables
14 | ----------------------
15 | As an example, consider the following type that defines a very simple table of strings:
16 | *)
17 | type Table = Table of string[,]
18 | (**
19 | The typical pattern for registering a printer would be to call `fsi.AddHtmlPrinter` wrapped
20 | inside an `#if .. #endif` block for compatibility reasons:
21 | *)
22 | #if HAS_FSI_ADDHTMLPRINTER
23 | fsi.AddHtmlPrinter(fun (Table t) ->
24 | let body =
25 | [ yield ""
26 | for i in 0 .. t.GetLength(0)-1 do
27 | yield ""
28 | for j in 0 .. t.GetLength(1)-1 do
29 | yield "" + t.[i,j] + " | "
30 | yield "
"
31 | yield "
" ]
32 | |> String.concat ""
33 | seq [ "style", "" ],
34 | body )
35 | #endif
36 | (**
37 | This defines a HTML printer that formats values of type `Table`. The function passed to
38 | `AddHtmlPrinter` needs to return a value of type `seq * string`. This is
39 | a tuple consisting of two things:
40 |
41 | - The second element is the HTML body that represents the formatted value. Typically,
42 | editors will embed this into HTML output.
43 |
44 | - A sequence of key value pairs that represents additional styles and sripts used that
45 | are required by the body. The keys can be `style` or `script` (or other custom keys
46 | supported by editors) and can be treated in a special way by the editors (e.g. if
47 | loading JavaScript dynamically requires placing the HTML content in an `