@@ -14,7 +14,23 @@ open Atom.Promise
1414
1515module AutocompleteResults =
1616 type CompletionResult = { Kind : string ; Data : string []}
17- type ParseResult = { Kind : string ; Data : string []}
17+
18+
19+ type Error = {
20+ StartLine : int
21+ StartLineAlternate : int
22+ StartColumn : int
23+ StartColumnAlternate : int
24+ EndLine : int
25+ EndLineAlternate : int
26+ EndColumn : int
27+ EndColumnAlternate : int
28+ Message : string
29+ Severity : string
30+ Subcategory : string
31+ }
32+
33+ type ParseResult = { Kind : string ; Data : Error []}
1834
1935module AutocompleteService =
2036 type State =
@@ -109,6 +125,11 @@ module AutocompleteHandler =
109125 service |> AutocompleteService.ask str 1 cb
110126
111127module AutocompleteProvider =
128+
129+ type Provider = { selector : string ; inclusionPriority : int ; excludeLowerPriority: bool ; getSuggestions : Options .Options -> Promise }
130+
131+
132+
112133 let getSuggestion service options =
113134 let path = options |> Atom.Promise.Options.getPath
114135 let row = ( options |> Atom.Promise.Options.getRow) + 1
@@ -134,13 +155,14 @@ module AutocompleteProvider =
134155 | ex -> Atom.Promise.resolve [||]
135156 service |> AutocompleteHandler.parseCurrent ( fun _ -> service |> AutocompleteHandler.completion path row col action |> ignore) |> ignore)
136157
158+
159+ let create service = { selector = " .source.fsharp" ; inclusionPriority = 1 ; excludeLowerPriority = true ; getSuggestions = getSuggestion service}
160+
137161module HighlighterHandler =
138162 let mutable marked = Array.empty< Marker>
139163
140164 let handle lst =
141- //iter(marked, destroyMarker)
142- //NOT WORKING
143- marked |> Array.iter( fun i -> i|> destroyMarker)
165+ marked |> Array.iter( destroyMarker)
144166 marked <- Array.empty< Marker>
145167 let editor = getActiveTextEditor()
146168 let action item =
@@ -149,24 +171,58 @@ module HighlighterHandler =
149171 let cls = if getItemSeverity( item) = " Warning" then " highlight-warning" else " highlight-error"
150172 marked <- Array.append [| marker|] marked
151173 decorateMarker( editor, marker, cls)
152- iter ( lst, action)
174+ lst |> Array.iter ( action)
153175 ()
154- //NOT WORKING
155- //lst |> List.iter(action)
156176
177+ module Views =
178+ let jq ( selector : string ) = Globals.Dollar.Invoke selector
179+ let (?) jq name = jq( " #" + name)
180+
181+ module ErrorRowView =
182+ let create ( e : AutocompleteResults.Error ) =
183+ sprintf " <tr><td>%d : %d </td><td>%s </td><td>%s </td><td>%s </td></tr>"
184+ e.StartLineAlternate
185+ e.StartColumn
186+ e.Message
187+ e.Severity
188+ e.Subcategory
189+ |> jq
190+
191+
192+ module ErrorPanelView =
193+ let handle lst =
194+ let list = jq( " #errorList" )
195+ list.children() .remove() |> ignore
196+ lst |> Array.iter( fun e -> let t = e |> ErrorRowView.create
197+ let r = t |> list.append
198+ ())
199+
200+ let create () =
201+ " <div class='tool-panel panel-bottom error-pane' id='pane'><div class='inset-panel'><div class='panel-heading clearfix'>Errors</div><table class='error-table'><thead><th>Position</th><th>Message</th><th>Type</th><th>Category</th></thead><tbody id='errorList'></table></div></div>"
202+ |> jq
203+
204+ let hadnleEditorChange panel editor =
205+ if editor |> getEditorGrammarName = " F#" then Workspace.showPanel panel else Workspace.hidePanel panel
157206
158207type Autocomplete () =
159208 let cd = CompositeDisposable.create()
160209 let service = AutocompleteService.create
161210 |> AutocompleteService.start
162211 |> AutocompleteService.send " outputmode json\n "
163-
164- member x.getSuggestion ( options : Atom.Promise.Options.Options ) =
165- AutocompleteProvider.getSuggestion service options
212+
213+ let panel =
214+ let t = Views.ErrorPanelView.create ()
215+ Workspace.addBotomPanel { Workspace.item = t; Workspace.priority = 100 ; Workspace.visible = false }
216+
217+ member x.provide ()=
218+ AutocompleteProvider.create service
166219
167220 member x.activate ( state : obj ) =
168221 onDidChangeActivePaneItem ( fun ed -> AutocompleteHandler.parseEditor ed ( fun _ -> ()) service |> ignore)
222+ onDidChangeActivePaneItem ( Views.ErrorPanelView.hadnleEditorChange panel)
169223 on( " FSharp.Atom:Highlight" , HighlighterHandler.handle)
224+ on( " FSharp.Atom:Highlight" , Views.ErrorPanelView.handle)
225+ ()
170226
171227 member x.deactivate () =
172228 CompositeDisposable.dispose( cd)
0 commit comments