Browse Source

parser: fix: `msecscount+x` => `msecscount(x)`

gretmn102 3 years ago
parent
commit
8e6e95bb2f
1 changed files with 26 additions and 2 deletions
  1. 26 2
      QSParse/ParserExpr.fs

+ 26 - 2
QSParse/ParserExpr.fs

@@ -164,9 +164,32 @@ let term expr =
                         >>% Var(varType, nameVar))
             >>= fun ((range, (varType, name)), f) ->
                     f (varType, name) range
+        // #load @"Defines.fs"
+        // open Qsp
+        let nullary, multiary =
+            Defines.functionsByName
+            |> Map.partition (fun _ x ->
+                let x, _ = x.Signature
+                match x with
+                | Defines.JustOverloads []
+                | Defines.JustOverloads [([||], ())] -> true
+                | _ -> false
+            )
+        let nullaryFunc =
+            nullary
+            |> Seq.sortByDescending (fun (KeyValue(name, _)) -> name) // для жадности
+            |> Seq.map (fun (KeyValue(name, x)) ->
+                applyRange (opt (pchar '$') >>? pstringCI name .>>? notFollowedVarCont)
+                >>= fun (range, name) ->
+                    appendToken2 TokenType.Function range
+                    >>. appendHover2 x.Description range
+                    >>% (name, range, x)
+            )
+            |> List.ofSeq
+            |> choice
 
         let pPreDefFunc =
-            Defines.functionsByName
+            multiary
             |> Seq.sortByDescending (fun (KeyValue(name, _)) -> name) // для жадности
             |> Seq.map (fun (KeyValue(name, x)) ->
                 applyRange (opt (pchar '$') >>? pstringCI name .>>? notFollowedVarCont)
@@ -177,7 +200,8 @@ let term expr =
             )
             |> List.ofSeq
             |> choice
-        pPreDefFunc .>> ws .>>. (pBracesArgs <|> (pterm |>> List.singleton) <|>% [])
+        nullaryFunc .>>. (ws >>. (pBracesArgs <|>% []))
+        <|> (pPreDefFunc .>> ws .>>. (pBracesArgs <|> (pterm |>> List.singleton) <|>% []))
         >>= fun ((stringName, range, x), args) ->
                 let sign, returnType = x.Signature
                 let p =