Skip to content

Format Code #896

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions analysis/reanalyze/src/Arnold.ml
Original file line number Diff line number Diff line change
@@ -813,10 +813,10 @@ module Compile = struct
| _ ->
Stats.logHygieneNamedArgValue ~label ~loc;
raise ArgError
[@@raises ArgError]
[@@raises ArgError]
in
functionArg ()
[@@raises ArgError]
[@@raises ArgError]
in
let functionArgsOpt =
try Some (functionDefinition.kind |> List.map getFunctionArg)
@@ -1320,15 +1320,15 @@ let traverseAst ~valueBindingsTable =
progressFunctionsFromAttributes valueBinding.vb_attributes
with
| None -> (progressFunctions, functionsToAnalyze)
| Some newProgressFunctions -> (
| Some newProgressFunctions ->
( StringSet.union
(StringSet.of_list newProgressFunctions)
progressFunctions,
match valueBinding.vb_pat.pat_desc with
| Tpat_var (id, _) ->
(Ident.name id, valueBinding.vb_expr.exp_loc)
:: functionsToAnalyze
| _ -> functionsToAnalyze )))
| _ -> functionsToAnalyze ))
(StringSet.empty, [])
in
(progressFunctions0, functionsToAnalyze0 |> List.rev)
12 changes: 6 additions & 6 deletions analysis/reanalyze/src/DeadValue.ml
Original file line number Diff line number Diff line change
@@ -45,12 +45,12 @@ let collectValueBinding super self (vb : Typedtree.value_binding) =
| _ -> false
in
(if (not exists) && not isFirstClassModule then
(* This is never toplevel currently *)
let isToplevel = oldLastBinding = Location.none in
let sideEffects = SideEffects.checkExpr vb.vb_expr in
name
|> addValueDeclaration ~isToplevel ~loc ~moduleLoc:currentModulePath.loc
~optionalArgs ~path ~sideEffects);
(* This is never toplevel currently *)
let isToplevel = oldLastBinding = Location.none in
let sideEffects = SideEffects.checkExpr vb.vb_expr in
name
|> addValueDeclaration ~isToplevel ~loc
~moduleLoc:currentModulePath.loc ~optionalArgs ~path ~sideEffects);
(match PosHash.find_opt decls loc_start with
| None -> ()
| Some decl ->
54 changes: 27 additions & 27 deletions analysis/reanalyze/src/Exception.ml
Original file line number Diff line number Diff line change
@@ -138,20 +138,20 @@ module Event = struct
if !Common.Cli.debug then Log_.item "%a@." print ev;
let nestedExceptions = loop Exceptions.empty nestedEvents in
(if Exceptions.isEmpty nestedExceptions (* catch-all *) then
let name =
match nestedEvents with
| {kind = Call {callee}} :: _ -> callee |> Common.Path.toName
| _ -> "expression" |> Name.create
in
Log_.warning ~loc
(Common.ExceptionAnalysis
{
message =
Format.asprintf
"@{<info>%s@} does not raise and is annotated with \
redundant @doesNotRaise"
(name |> Name.toString);
}));
let name =
match nestedEvents with
| {kind = Call {callee}} :: _ -> callee |> Common.Path.toName
| _ -> "expression" |> Name.create
in
Log_.warning ~loc
(Common.ExceptionAnalysis
{
message =
Format.asprintf
"@{<info>%s@} does not raise and is annotated with \
redundant @doesNotRaise"
(name |> Name.toString);
}));
loop exnSet rest
| ({kind = Catches nestedEvents; exceptions} as ev) :: rest ->
if !Common.Cli.debug then Log_.item "%a@." print ev;
@@ -192,11 +192,11 @@ module Checks = struct
let missingAnnotations = Exceptions.diff raiseSet exceptions in
let redundantAnnotations = Exceptions.diff exceptions raiseSet in
(if not (Exceptions.isEmpty missingAnnotations) then
let description =
Common.ExceptionAnalysisMissing
{exnName; exnTable; raiseSet; missingAnnotations; locFull}
in
Log_.warning ~loc description);
let description =
Common.ExceptionAnalysisMissing
{exnName; exnTable; raiseSet; missingAnnotations; locFull}
in
Log_.warning ~loc description);
if not (Exceptions.isEmpty redundantAnnotations) then
Log_.warning ~loc
(Common.ExceptionAnalysis
@@ -356,14 +356,14 @@ let traverseAst () =
cases |> iterCases self
| _ -> super.expr self expr |> ignore);
(if isDoesNoRaise then
let nestedEvents = !currentEvents in
currentEvents :=
{
Event.exceptions = Exceptions.empty;
loc;
kind = DoesNotRaise nestedEvents;
}
:: oldEvents);
let nestedEvents = !currentEvents in
currentEvents :=
{
Event.exceptions = Exceptions.empty;
loc;
kind = DoesNotRaise nestedEvents;
}
:: oldEvents);
expr
in
let getExceptionsFromAnnotations attributes =
8 changes: 4 additions & 4 deletions analysis/reanalyze/src/Log_.ml
Original file line number Diff line number Diff line change
@@ -75,10 +75,10 @@ module Loc = struct
pos_cnum = char;
pos_fname =
(let open Filename in
match is_implicit pos.pos_fname with
| _ when !Cli.ci -> basename pos.pos_fname
| true -> concat (Sys.getcwd ()) pos.pos_fname
| false -> pos.pos_fname);
match is_implicit pos.pos_fname with
| _ when !Cli.ci -> basename pos.pos_fname
| true -> concat (Sys.getcwd ()) pos.pos_fname
| false -> pos.pos_fname);
}
in
Location.print_loc ppf
4 changes: 2 additions & 2 deletions analysis/reanalyze/src/Reanalyze.ml
Original file line number Diff line number Diff line change
@@ -110,7 +110,7 @@ let cli () =
let versionAndExit () =
print_endline usage;
exit 0
[@@raises exit]
[@@raises exit]
in
let rec setAll cmtRoot =
RunConfig.all ();
@@ -216,7 +216,7 @@ let cli () =
if !analysisKindSet = false then setConfig ();
let cmtRoot = !cmtRootRef in
runAnalysisAndReport ~cmtRoot
[@@raises exit]
[@@raises exit]

module RunConfig = RunConfig
module Log_ = Log_
62 changes: 31 additions & 31 deletions analysis/reanalyze/src/WriteDeadAnnotations.ml
Original file line number Diff line number Diff line change
@@ -42,33 +42,33 @@ let rec lineToString_ {original; declarations} =
{
original =
(if String.length original >= col && col > 0 then
let original1, original2 =
try
( String.sub original 0 col,
String.sub original col (originalLen - col) )
with Invalid_argument _ -> (original, "")
in
if language = Res && declKind = VariantCase then
if
String.length original2 >= 2
&& (String.sub [@doesNotRaise]) original2 0 2 = "| "
then
original1 ^ "| " ^ annotationStr
^ (String.sub [@doesNotRaise]) original2 2
(String.length original2 - 2)
else if
String.length original2 >= 1
&& (String.sub [@doesNotRaise]) original2 0 1 = "|"
then
original1 ^ "|" ^ annotationStr
^ (String.sub [@doesNotRaise]) original2 1
(String.length original2 - 1)
else original1 ^ "| " ^ annotationStr ^ original2
else original1 ^ annotationStr ^ original2
else
match language = Ml with
| true -> original ^ annotationStr
| false -> annotationStr ^ original);
let original1, original2 =
try
( String.sub original 0 col,
String.sub original col (originalLen - col) )
with Invalid_argument _ -> (original, "")
in
if language = Res && declKind = VariantCase then
if
String.length original2 >= 2
&& (String.sub [@doesNotRaise]) original2 0 2 = "| "
then
original1 ^ "| " ^ annotationStr
^ (String.sub [@doesNotRaise]) original2 2
(String.length original2 - 2)
else if
String.length original2 >= 1
&& (String.sub [@doesNotRaise]) original2 0 1 = "|"
then
original1 ^ "|" ^ annotationStr
^ (String.sub [@doesNotRaise]) original2 1
(String.length original2 - 1)
else original1 ^ "| " ^ annotationStr ^ original2
else original1 ^ annotationStr ^ original2
else
match language = Ml with
| true -> original ^ annotationStr
| false -> annotationStr ^ original);
declarations = nextDeclarations;
}
|> lineToString_
@@ -91,7 +91,7 @@ let readFile fileName =
let line = {original = input_line channel; declarations = []} in
lines := line :: !lines;
loop ()
[@@raises End_of_file]
[@@raises End_of_file]
in
try loop ()
with End_of_file ->
@@ -122,9 +122,9 @@ let getLineAnnotation ~decl ~line =
posAnnotation.pos_cnum - posAnnotation.pos_bol + offset )
~text:
(if decl.posAdjustment = FirstVariant then
(* avoid syntax error *)
"| @dead "
else "@dead ")
(* avoid syntax error *)
"| @dead "
else "@dead ")
~action:"Suppress dead code warning"
else
Format.asprintf "@. <-- line %d@. %s" decl.pos.pos_lnum
108 changes: 54 additions & 54 deletions analysis/src/CompletionFrontEnd.ml
Original file line number Diff line number Diff line change
@@ -697,60 +697,60 @@ let completionWithParser1 ~currentFile ~debug ~offset ~path ~posCursor
let attribute (iterator : Ast_iterator.iterator)
((id, payload) : Parsetree.attribute) =
(if String.length id.txt >= 4 && String.sub id.txt 0 4 = "res." then
(* skip: internal parser attribute *) ()
else if id.loc.loc_ghost then ()
else if id.loc |> Loc.hasPos ~pos:posBeforeCursor then
let posStart, posEnd = Loc.range id.loc in
match
(Pos.positionToOffset text posStart, Pos.positionToOffset text posEnd)
with
| Some offsetStart, Some offsetEnd ->
(* Can't trust the parser's location
E.g. @foo. let x... gives as label @foo.let *)
let label =
let rawLabel =
String.sub text offsetStart (offsetEnd - offsetStart)
in
let ( ++ ) x y =
match (x, y) with
| Some i1, Some i2 -> Some (min i1 i2)
| Some _, None -> x
| None, _ -> y
in
let label =
match
String.index_opt rawLabel ' '
++ String.index_opt rawLabel '\t'
++ String.index_opt rawLabel '\r'
++ String.index_opt rawLabel '\n'
with
| None -> rawLabel
| Some i -> String.sub rawLabel 0 i
in
if label <> "" && label.[0] = '@' then
String.sub label 1 (String.length label - 1)
else label
in
found := true;
if debug then
Printf.printf "Attribute id:%s:%s label:%s\n" id.txt
(Loc.toString id.loc) label;
setResult (Completable.Cdecorator label)
| _ -> ()
else if id.txt = "module" then
(match payload with
| PStr
[
{
pstr_desc =
Pstr_eval
( {pexp_loc; pexp_desc = Pexp_constant (Pconst_string (s, _))},
_ );
};
]
when locHasCursor pexp_loc ->
setResult (Completable.CdecoratorPayload (Module s))
| _ -> ()));
(* skip: internal parser attribute *) ()
else if id.loc.loc_ghost then ()
else if id.loc |> Loc.hasPos ~pos:posBeforeCursor then
let posStart, posEnd = Loc.range id.loc in
match
(Pos.positionToOffset text posStart, Pos.positionToOffset text posEnd)
with
| Some offsetStart, Some offsetEnd ->
(* Can't trust the parser's location
E.g. @foo. let x... gives as label @foo.let *)
let label =
let rawLabel =
String.sub text offsetStart (offsetEnd - offsetStart)
in
let ( ++ ) x y =
match (x, y) with
| Some i1, Some i2 -> Some (min i1 i2)
| Some _, None -> x
| None, _ -> y
in
let label =
match
String.index_opt rawLabel ' '
++ String.index_opt rawLabel '\t'
++ String.index_opt rawLabel '\r'
++ String.index_opt rawLabel '\n'
with
| None -> rawLabel
| Some i -> String.sub rawLabel 0 i
in
if label <> "" && label.[0] = '@' then
String.sub label 1 (String.length label - 1)
else label
in
found := true;
if debug then
Printf.printf "Attribute id:%s:%s label:%s\n" id.txt
(Loc.toString id.loc) label;
setResult (Completable.Cdecorator label)
| _ -> ()
else if id.txt = "module" then
match payload with
| PStr
[
{
pstr_desc =
Pstr_eval
( {pexp_loc; pexp_desc = Pexp_constant (Pconst_string (s, _))},
_ );
};
]
when locHasCursor pexp_loc ->
setResult (Completable.CdecoratorPayload (Module s))
| _ -> ());
Ast_iterator.default_iterator.attribute iterator (id, payload)
in
let rec iterateFnArguments ~args ~iterator ~isPipe
18 changes: 9 additions & 9 deletions analysis/src/DocumentSymbol.ml
Original file line number Diff line number Diff line change
@@ -135,15 +135,15 @@ let command ~path =
in

(if Filename.check_suffix path ".res" then
let parser =
Res_driver.parsingEngine.parseImplementation ~forPrinter:false
in
let {Res_driver.parsetree = structure} = parser ~filename:path in
iterator.structure iterator structure |> ignore
else
let parser = Res_driver.parsingEngine.parseInterface ~forPrinter:false in
let {Res_driver.parsetree = signature} = parser ~filename:path in
iterator.signature iterator signature |> ignore);
let parser =
Res_driver.parsingEngine.parseImplementation ~forPrinter:false
in
let {Res_driver.parsetree = structure} = parser ~filename:path in
iterator.structure iterator structure |> ignore
else
let parser = Res_driver.parsingEngine.parseInterface ~forPrinter:false in
let {Res_driver.parsetree = signature} = parser ~filename:path in
iterator.signature iterator signature |> ignore);
let isInside
({
range =
2 changes: 1 addition & 1 deletion analysis/src/Files.ml
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@ let relpath base path =
let baselen = String.length base in
let rest = String.sub path baselen (String.length path - baselen) in
(if rest <> "" && rest.[0] = Filename.dir_sep.[0] then sliceToEnd rest 1
else rest)
else rest)
|> removeExtraDots
else
let rec loop bp pp =
20 changes: 10 additions & 10 deletions analysis/src/Hint.ml
Original file line number Diff line number Diff line change
@@ -71,11 +71,11 @@ let inlay ~path ~pos ~maxLength ~debug =
in
let iterator = {Ast_iterator.default_iterator with value_binding} in
(if Files.classifySourceFile path = Res then
let parser =
Res_driver.parsingEngine.parseImplementation ~forPrinter:false
in
let {Res_driver.parsetree = structure} = parser ~filename:path in
iterator.structure iterator structure |> ignore);
let parser =
Res_driver.parsingEngine.parseImplementation ~forPrinter:false
in
let {Res_driver.parsetree = structure} = parser ~filename:path in
iterator.structure iterator structure |> ignore);
match Cmt.loadFullCmtFromPath ~path with
| None -> None
| Some full ->
@@ -135,11 +135,11 @@ let codeLens ~path ~debug =
(* We only print code lenses in implementation files. This is because they'd be redundant in interface files,
where the definition itself will be the same thing as what would've been printed in the code lens. *)
(if Files.classifySourceFile path = Res then
let parser =
Res_driver.parsingEngine.parseImplementation ~forPrinter:false
in
let {Res_driver.parsetree = structure} = parser ~filename:path in
iterator.structure iterator structure |> ignore);
let parser =
Res_driver.parsingEngine.parseImplementation ~forPrinter:false
in
let {Res_driver.parsetree = structure} = parser ~filename:path in
iterator.structure iterator structure |> ignore);
match Cmt.loadFullCmtFromPath ~path with
| None -> None
| Some full ->
113 changes: 57 additions & 56 deletions analysis/src/Packages.ml
Original file line number Diff line number Diff line change
@@ -32,9 +32,10 @@ let newBsPackage ~rootPath =
let bsconfigJson = Filename.concat rootPath "bsconfig.json" in

let parseRaw raw =
let libBs = match !Cfg.isDocGenFromCompiler with
| true -> BuildSystem.getStdlib rootPath
| false -> BuildSystem.getLibBs rootPath
let libBs =
match !Cfg.isDocGenFromCompiler with
| true -> BuildSystem.getStdlib rootPath
| false -> BuildSystem.getLibBs rootPath
in
match Json.parse raw with
| Some config -> (
@@ -48,10 +49,10 @@ let newBsPackage ~rootPath =
(let namespace = FindFiles.getNamespace config in
let rescriptVersion = getReScriptVersion () in
let suffix =
match config |> Json.get "suffix" with
| Some (String suffix) -> suffix
| _ -> ".js"
in
match config |> Json.get "suffix" with
| Some (String suffix) -> suffix
| _ -> ".js"
in
let uncurried =
let ns = config |> Json.get "uncurried" in
match (rescriptVersion, ns) with
@@ -132,55 +133,55 @@ let newBsPackage ~rootPath =
namespace;
builtInCompletionModules =
(if
opens_from_bsc_flags
|> List.find_opt (fun opn ->
match opn with
| ["RescriptCore"] -> true
| _ -> false)
|> Option.is_some
then
{
arrayModulePath = ["Array"];
optionModulePath = ["Option"];
stringModulePath = ["String"];
intModulePath = ["Int"];
floatModulePath = ["Float"];
promiseModulePath = ["Promise"];
listModulePath = ["List"];
resultModulePath = ["Result"];
exnModulePath = ["Exn"];
}
else if
opens_from_bsc_flags
|> List.find_opt (fun opn ->
match opn with
| ["Belt"] -> true
| _ -> false)
|> Option.is_some
then
{
arrayModulePath = ["Array"];
optionModulePath = ["Option"];
stringModulePath = ["Js"; "String2"];
intModulePath = ["Int"];
floatModulePath = ["Float"];
promiseModulePath = ["Js"; "Promise"];
listModulePath = ["List"];
resultModulePath = ["Result"];
exnModulePath = ["Js"; "Exn"];
}
else
{
arrayModulePath = ["Js"; "Array2"];
optionModulePath = ["Belt"; "Option"];
stringModulePath = ["Js"; "String2"];
intModulePath = ["Belt"; "Int"];
floatModulePath = ["Belt"; "Float"];
promiseModulePath = ["Js"; "Promise"];
listModulePath = ["Belt"; "List"];
resultModulePath = ["Belt"; "Result"];
exnModulePath = ["Js"; "Exn"];
});
opens_from_bsc_flags
|> List.find_opt (fun opn ->
match opn with
| ["RescriptCore"] -> true
| _ -> false)
|> Option.is_some
then
{
arrayModulePath = ["Array"];
optionModulePath = ["Option"];
stringModulePath = ["String"];
intModulePath = ["Int"];
floatModulePath = ["Float"];
promiseModulePath = ["Promise"];
listModulePath = ["List"];
resultModulePath = ["Result"];
exnModulePath = ["Exn"];
}
else if
opens_from_bsc_flags
|> List.find_opt (fun opn ->
match opn with
| ["Belt"] -> true
| _ -> false)
|> Option.is_some
then
{
arrayModulePath = ["Array"];
optionModulePath = ["Option"];
stringModulePath = ["Js"; "String2"];
intModulePath = ["Int"];
floatModulePath = ["Float"];
promiseModulePath = ["Js"; "Promise"];
listModulePath = ["List"];
resultModulePath = ["Result"];
exnModulePath = ["Js"; "Exn"];
}
else
{
arrayModulePath = ["Js"; "Array2"];
optionModulePath = ["Belt"; "Option"];
stringModulePath = ["Js"; "String2"];
intModulePath = ["Belt"; "Int"];
floatModulePath = ["Belt"; "Float"];
promiseModulePath = ["Js"; "Promise"];
listModulePath = ["Belt"; "List"];
resultModulePath = ["Belt"; "Result"];
exnModulePath = ["Js"; "Exn"];
});
uncurried;
})))
| None -> None
8 changes: 4 additions & 4 deletions analysis/src/ProcessExtra.ml
Original file line number Diff line number Diff line change
@@ -9,8 +9,8 @@ let addReference ~extra stamp loc =
(loc
::
(if Hashtbl.mem extra.internalReferences stamp then
Hashtbl.find extra.internalReferences stamp
else []))
Hashtbl.find extra.internalReferences stamp
else []))

let extraForFile ~(file : File.t) =
let extra = initExtra () in
@@ -66,8 +66,8 @@ let addExternalReference ~extra moduleName path tip loc =
((path, tip, loc)
::
(if Hashtbl.mem extra.externalReferences moduleName then
Hashtbl.find extra.externalReferences moduleName
else []))
Hashtbl.find extra.externalReferences moduleName
else []))

let addFileReference ~extra moduleName loc =
let newLocs =
2 changes: 1 addition & 1 deletion analysis/src/References.ml
Original file line number Diff line number Diff line change
@@ -66,7 +66,7 @@ let getLocItem ~full ~pos ~debug =
| [
({locType = Typed (_, _, LocalReference _)} as li1);
({locType = Typed (_, _, GlobalReference ("Js_OO", ["unsafe_downgrade"], _))}
as li2);
as li2);
li3;
]
(* For older compiler 9.0 or earlier *)
14 changes: 7 additions & 7 deletions analysis/src/Scope.ml
Original file line number Diff line number Diff line change
@@ -14,7 +14,7 @@ let itemToString item =
| Module (s, loc) -> "Module " ^ s ^ " " ^ Loc.toString loc
| Value (s, loc, _, _) -> "Value " ^ s ^ " " ^ Loc.toString loc
| Type (s, loc) -> "Type " ^ s ^ " " ^ Loc.toString loc
[@@live]
[@@live]

let create () : t = []
let addConstructor ~name ~loc x = Constructor (name, loc) :: x
@@ -24,12 +24,12 @@ let addOpen ~lid x = Open (Utils.flattenLongIdent lid @ ["place holder"]) :: x
let addValue ~name ~loc ?contextPath x =
let showDebug = !Cfg.debugFollowCtxPath in
(if showDebug then
match contextPath with
| None -> Printf.printf "adding value '%s', no ctxPath\n" name
| Some contextPath ->
if showDebug then
Printf.printf "adding value '%s' with ctxPath: %s\n" name
(SharedTypes.Completable.contextPathToString contextPath));
match contextPath with
| None -> Printf.printf "adding value '%s', no ctxPath\n" name
| Some contextPath ->
if showDebug then
Printf.printf "adding value '%s' with ctxPath: %s\n" name
(SharedTypes.Completable.contextPathToString contextPath));
Value (name, loc, contextPath, x) :: x
let addType ~name ~loc x = Type (name, loc) :: x

24 changes: 12 additions & 12 deletions analysis/src/SemanticTokens.ml
Original file line number Diff line number Diff line change
@@ -283,18 +283,18 @@ let command ~debug ~emitter ~path =
(* there's an off-by one somehow in the AST *)
in
(if not selfClosing then
let lineStart, colStart = Loc.start pexp_loc in
let lineEnd, colEnd = Loc.end_ pexp_loc in
let length = if lineStart = lineEnd then colEnd - colStart else 0 in
let lineEndWhole, colEndWhole = Loc.end_ e.pexp_loc in
if length > 0 && colEndWhole > length then (
emitter
|> emitJsxClose ~debug ~lid:lident.txt
~pos:(lineEndWhole, colEndWhole - 1);
emitter (* <foo ...props > <-- *)
|> emitJsxTag ~debug ~name:">" ~pos:posOfGreatherthanAfterProps;
emitter (* <foo> ... </foo> <-- *)
|> emitJsxTag ~debug ~name:">" ~pos:posOfFinalGreatherthan));
let lineStart, colStart = Loc.start pexp_loc in
let lineEnd, colEnd = Loc.end_ pexp_loc in
let length = if lineStart = lineEnd then colEnd - colStart else 0 in
let lineEndWhole, colEndWhole = Loc.end_ e.pexp_loc in
if length > 0 && colEndWhole > length then (
emitter
|> emitJsxClose ~debug ~lid:lident.txt
~pos:(lineEndWhole, colEndWhole - 1);
emitter (* <foo ...props > <-- *)
|> emitJsxTag ~debug ~name:">" ~pos:posOfGreatherthanAfterProps;
emitter (* <foo> ... </foo> <-- *)
|> emitJsxTag ~debug ~name:">" ~pos:posOfFinalGreatherthan));

args |> List.iter (fun (_lbl, arg) -> iterator.expr iterator arg)
| Pexp_apply
2 changes: 1 addition & 1 deletion tools/bin/version.ml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
let version = "0.3.0"
let version = "0.3.0"