From e03659d858c497fd9d14549260546ed8494f253c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Cie=C5=9Blak?= Date: Sun, 17 May 2015 22:43:27 +0200 Subject: [PATCH 1/4] Add Glyph to Completion output --- FSharp.AutoComplete/Program.fs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/FSharp.AutoComplete/Program.fs b/FSharp.AutoComplete/Program.fs index 7657e1a3f..d32d9d823 100644 --- a/FSharp.AutoComplete/Program.fs +++ b/FSharp.AutoComplete/Program.fs @@ -48,6 +48,12 @@ type Location = Column: int } +type CompletionResponse = + { + Name: string + Glyph: int + } + type ProjectResponse = { Project: string @@ -474,7 +480,7 @@ module internal Main = match state.OutputMode with | Text -> printAgent.WriteLine "DATA: completion" - for d in decls.Items do printAgent.WriteLine(d.Name) + for d in decls.Items do printAgent.WriteLine(sprintf "%s:%d" d.Name d.Glyph) printAgent.WriteLine "<>" main state | Json -> @@ -488,7 +494,7 @@ module internal Main = prAsJson { Kind = "helptext"; Data = helptext } prAsJson { Kind = "completion" - Data = [ for d in decls.Items do yield d.Name ] } + Data = [ for d in decls.Items do yield { Name = d.Name; Glyph = d.Glyph } ] } let helptext = Seq.fold (fun m (d: FSharpDeclarationListItem) -> Map.add d.Name d.DescriptionText m) Map.empty decls.Items From bcc9c65b0b7577120add4260263b33c2b6bf2f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Cie=C5=9Blak?= Date: Tue, 19 May 2015 23:24:43 +0200 Subject: [PATCH 2/4] Translating glyph to string and glyph character --- FSharp.AutoComplete/Program.fs | 51 ++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/FSharp.AutoComplete/Program.fs b/FSharp.AutoComplete/Program.fs index d32d9d823..958276a01 100644 --- a/FSharp.AutoComplete/Program.fs +++ b/FSharp.AutoComplete/Program.fs @@ -51,7 +51,8 @@ type Location = type CompletionResponse = { Name: string - Glyph: int + Glyph: string + GlyphChar: string } type ProjectResponse = @@ -273,6 +274,48 @@ module internal CommandInput = let cmds = compilerlocation <|> outputmode <|> helptext <|> help <|> declarations <|> parse <|> project <|> completionTipOrDecl <|> quit <|> error reader |> Parsing.getFirst cmds +module internal CompletionUtils = + let map = + [ 0x0000, ("Class", "C") + 0x0003, ("Enum", "E") + 0x00012, ("Struct", "S") + 0x00018, ("Struct", "S") (* value type *) + 0x0002, ("Delegate", "D") + 0x0008, ("Interface", "I") + 0x000e, ("Module", "N") (* module *) + 0x000f, ("Namespace", "N") + 0x000c, ("Method", "m") + 0x000d, ("Extension Method", "m") (* method2 ? *) + 0x00011, ("Property", "P") + 0x0005, ("Event", "e") + 0x0007, ("Field", "F") (* fieldblue ? *) + 0x0020, ("Field", "F") (* fieldyellow ? *) + 0x0001, ("Field", "F") (* const *) + 0x0004, ("Property", "P") (* enummember *) + 0x0006, ("Exception", "X") (* exception *) + 0x0009, ("Text File Icon", "t") (* TextLine *) + 0x000a, ("Regular File", "R") (* Script *) + 0x000b, ("Script", "s") (* Script2 *) + 0x0010, ("Tip of the day", "t") (* Formula *); + 0x00013, ("Class", "C") (* Template *) + 0x00014, ("Class", "C") (* Typedef *) + 0x00015, ("Type", "T") (* Type *) + 0x00016, ("Type", "T") (* Union *) + 0x00017, ("Field", "F") (* Variable *) + 0x00019, ("Class", "C") (* Intrinsic *) + 0x0001f, ("Other", "o") (* error *) + 0x00021, ("Other", "o") (* Misc1 *) + 0x0022, ("Other", "o") (* Misc2 *) + 0x00023, ("Other", "o") (* Misc3 *) ] |> Map.ofSeq + + /// Translates icon code that we get from F# language service into a MonoDevelop icon + let getIcon glyph = + match map.TryFind (glyph / 6), map.TryFind (glyph % 6) with + | Some(s), _ -> s // Is the second number good for anything? + | _, _ -> ("", "") + + + // -------------------------------------------------------------------------------------- // Main application command-line loop // -------------------------------------------------------------------------------------- @@ -480,7 +523,7 @@ module internal Main = match state.OutputMode with | Text -> printAgent.WriteLine "DATA: completion" - for d in decls.Items do printAgent.WriteLine(sprintf "%s:%d" d.Name d.Glyph) + for d in decls.Items do printAgent.WriteLine(sprintf "%s" d.Name) printAgent.WriteLine "<>" main state | Json -> @@ -494,7 +537,9 @@ module internal Main = prAsJson { Kind = "helptext"; Data = helptext } prAsJson { Kind = "completion" - Data = [ for d in decls.Items do yield { Name = d.Name; Glyph = d.Glyph } ] } + Data = [ for d in decls.Items do + let (glyph, glyphChar) = CompletionUtils.getIcon d.Glyph + yield { Name = d.Name; Glyph = glyph; GlyphChar = glyphChar } ] } let helptext = Seq.fold (fun m (d: FSharpDeclarationListItem) -> Map.add d.Name d.DescriptionText m) Map.empty decls.Items From 7ce97e3cebe938a39201b318391d014f4bdd2d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Cie=C5=9Blak?= Date: Tue, 19 May 2015 23:28:29 +0200 Subject: [PATCH 3/4] Update test results --- .../test/integration/ErrorTestsJson/output.json | 4 ++-- .../test/integration/Test1Json/output.json | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/FSharp.AutoComplete/test/integration/ErrorTestsJson/output.json b/FSharp.AutoComplete/test/integration/ErrorTestsJson/output.json index 024666567..dc7487ea2 100644 --- a/FSharp.AutoComplete/test/integration/ErrorTestsJson/output.json +++ b/FSharp.AutoComplete/test/integration/ErrorTestsJson/output.json @@ -4,6 +4,6 @@ {"Kind":"INFO","Data":"Synchronous parsing started"} {"Kind":"errors","Data":[{"StartLine":7,"StartLineAlternate":8,"EndLine":7,"EndLineAlternate":8,"StartColumn":12,"EndColumn":19,"Severity":"Error","Message":"The value or constructor 'unnamed' is not defined","Subcategory":"typecheck","FileName":"/test/integration/ErrorTestsJson/Script.fsx"}]} {"Kind":"helptext","Data":{"func":"val func : x:int -> int"}} -{"Kind":"completion","Data":["func"]} +{"Kind":"completion","Data":[{"Name":"func","Glyph":"Method","GlyphChar":"m"}]} {"Kind":"helptext","Data":{"func":"val func : x:int -> int"}} -{"Kind":"completion","Data":["func"]} +{"Kind":"completion","Data":[{"Name":"func","Glyph":"Method","GlyphChar":"m"}]} diff --git a/FSharp.AutoComplete/test/integration/Test1Json/output.json b/FSharp.AutoComplete/test/integration/Test1Json/output.json index c0d823a03..c437d64a8 100644 --- a/FSharp.AutoComplete/test/integration/Test1Json/output.json +++ b/FSharp.AutoComplete/test/integration/Test1Json/output.json @@ -6,15 +6,15 @@ {"Kind":"INFO","Data":"Synchronous parsing started"} {"Kind":"errors","Data":[]} {"Kind":"helptext","Data":{"funky":"val funky : x:int -> int"}} -{"Kind":"completion","Data":["funky"]} +{"Kind":"completion","Data":[{"Name":"funky","Glyph":"Method","GlyphChar":"m"}]} {"Kind":"helptext","Data":{"Equals":"System.Object.Equals(obj: obj) : bool"}} -{"Kind":"completion","Data":["Equals","GetHashCode","GetType","Terrific","ToString"]} +{"Kind":"completion","Data":[{"Name":"Equals","Glyph":"Method","GlyphChar":"m"},{"Name":"GetHashCode","Glyph":"Method","GlyphChar":"m"},{"Name":"GetType","Glyph":"Method","GlyphChar":"m"},{"Name":"Terrific","Glyph":"Method","GlyphChar":"m"},{"Name":"ToString","Glyph":"Method","GlyphChar":"m"}]} {"Kind":"helptext","Data":{"Bar":"union case FileTwo.Foo.Bar: FileTwo.Foo"}} -{"Kind":"completion","Data":["Bar","Foo","NewObjectType","Qux","add","addition"]} +{"Kind":"completion","Data":[{"Name":"Bar","Glyph":"Property","GlyphChar":"P"},{"Name":"Foo","Glyph":"Type","GlyphChar":"T"},{"Name":"NewObjectType","Glyph":"Class","GlyphChar":"C"},{"Name":"Qux","Glyph":"Property","GlyphChar":"P"},{"Name":"add","Glyph":"Method","GlyphChar":"m"},{"Name":"addition","Glyph":"Method","GlyphChar":"m"}]} {"Kind":"helptext","Data":{"func":"val func : x:int -> int"}} -{"Kind":"completion","Data":["func"]} +{"Kind":"completion","Data":[{"Name":"func","Glyph":"Method","GlyphChar":"m"}]} {"Kind":"helptext","Data":{"Bar":"union case FileTwo.Foo.Bar: FileTwo.Foo"}} -{"Kind":"completion","Data":["Bar","Foo","NewObjectType","Qux","add","addition"]} +{"Kind":"completion","Data":[{"Name":"Bar","Glyph":"Property","GlyphChar":"P"},{"Name":"Foo","Glyph":"Type","GlyphChar":"T"},{"Name":"NewObjectType","Glyph":"Class","GlyphChar":"C"},{"Name":"Qux","Glyph":"Property","GlyphChar":"P"},{"Name":"add","Glyph":"Method","GlyphChar":"m"},{"Name":"addition","Glyph":"Method","GlyphChar":"m"}]} {"Kind":"tooltip","Data":"val add : x:int -> y:int -> int\n\nFull name: FileTwo.add"} {"Kind":"tooltip","Data":"val func : x:int -> int\n\nFull name: Program.X.func"} {"Kind":"tooltip","Data":"val testval : FileTwo.NewObjectType\n\nFull name: Program.testval"} From 44d3d3ba5cd619f57195286f2f1018c31f32ed3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Cie=C5=9Blak?= Date: Wed, 20 May 2015 12:02:22 +0200 Subject: [PATCH 4/4] Small fixes --- FSharp.AutoComplete/Program.fs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/FSharp.AutoComplete/Program.fs b/FSharp.AutoComplete/Program.fs index 958276a01..217a48e97 100644 --- a/FSharp.AutoComplete/Program.fs +++ b/FSharp.AutoComplete/Program.fs @@ -284,8 +284,8 @@ module internal CompletionUtils = 0x0008, ("Interface", "I") 0x000e, ("Module", "N") (* module *) 0x000f, ("Namespace", "N") - 0x000c, ("Method", "m") - 0x000d, ("Extension Method", "m") (* method2 ? *) + 0x000c, ("Method", "M") + 0x000d, ("Extension Method", "M") (* method2 ? *) 0x00011, ("Property", "P") 0x0005, ("Event", "e") 0x0007, ("Field", "F") (* fieldblue ? *) @@ -523,7 +523,7 @@ module internal Main = match state.OutputMode with | Text -> printAgent.WriteLine "DATA: completion" - for d in decls.Items do printAgent.WriteLine(sprintf "%s" d.Name) + for d in decls.Items do printAgent.WriteLine(d.Name) printAgent.WriteLine "<>" main state | Json ->