Skip to content

Refactor commands avoiding redundancies. #141

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

Merged
merged 10 commits into from
Apr 26, 2021
Merged
Show file tree
Hide file tree
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
33 changes: 12 additions & 21 deletions analysis/.depend
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
src/BuildSystem.cmx : src/ModuleResolution.cmx src/Log.cmx src/Infix.cmx \
src/Files.cmx
src/Cli.cmx : src/Commands.cmx
src/Commands.cmx : src/Utils.cmx src/Uri2.cmx src/TopTypes.cmx src/State.cmx \
src/SharedTypes.cmx src/Shared.cmx src/References.cmx src/Protocol.cmx \
src/Commands.cmx : src/Utils.cmx src/Uri2.cmx src/SharedTypes.cmx \
src/Shared.cmx src/References.cmx src/Protocol.cmx src/ProcessCmt.cmx \
src/NewCompletions.cmx src/Hover.cmx src/Files.cmx
src/Files.cmx :
src/FindFiles.cmx : src/Utils.cmx src/SharedTypes.cmx \
src/ModuleResolution.cmx src/Log.cmx src/vendor/Json.cmx src/Infix.cmx \
src/Files.cmx src/BuildSystem.cmx
src/Hover.cmx : src/Utils.cmx src/SharedTypes.cmx src/Shared.cmx \
src/References.cmx src/Query.cmx
src/References.cmx src/ProcessCmt.cmx
src/Infix.cmx : src/Log.cmx src/Files.cmx
src/Log.cmx :
src/ModuleResolution.cmx : src/Infix.cmx src/Files.cmx
src/NewCompletions.cmx : src/Utils.cmx src/Uri2.cmx src/TopTypes.cmx \
src/State.cmx src/SharedTypes.cmx src/Shared.cmx src/Query.cmx \
src/Protocol.cmx src/PartialParser.cmx src/Log.cmx src/Infix.cmx \
src/Hover.cmx
src/SharedTypes.cmx src/Shared.cmx src/Protocol.cmx src/ProcessCmt.cmx \
src/PartialParser.cmx src/Log.cmx src/Infix.cmx src/Hover.cmx
src/Packages.cmx : src/Uri2.cmx src/TopTypes.cmx src/SharedTypes.cmx \
src/Log.cmx src/vendor/Json.cmx src/Infix.cmx src/FindFiles.cmx \
src/Files.cmx src/BuildSystem.cmx
Expand All @@ -25,26 +24,18 @@ src/PrepareUtils.cmx :
src/PrintType.cmx : src/vendor/res_outcome_printer/res_outcome_printer.cmx \
src/vendor/res_outcome_printer/res_doc.cmx
src/ProcessAttributes.cmx : src/SharedTypes.cmx src/PrepareUtils.cmx
src/ProcessCmt.cmx : src/Utils.cmx src/SharedTypes.cmx \
src/ProcessAttributes.cmx src/Infix.cmx
src/ProcessExtra.cmx : src/Utils.cmx src/SharedTypes.cmx src/Shared.cmx \
src/Query.cmx src/ProcessCmt.cmx src/ProcessAttributes.cmx src/Log.cmx
src/Process_406.cmx : src/SharedTypes.cmx src/Shared.cmx \
src/ProcessExtra.cmx src/ProcessCmt.cmx src/PrintType.cmx \
src/Process_406.cmi
src/Process_406.cmi : src/Uri2.cmx src/SharedTypes.cmx
src/ProcessCmt.cmx : src/Utils.cmx src/Uri2.cmx src/TopTypes.cmx \
src/SharedTypes.cmx src/Shared.cmx src/ProcessAttributes.cmx \
src/Packages.cmx src/Log.cmx src/Infix.cmx src/FindFiles.cmx \
src/Files.cmx src/BuildSystem.cmx
src/Protocol.cmx : src/vendor/Json.cmx
src/Query.cmx : src/SharedTypes.cmx src/Log.cmx src/Infix.cmx
src/References.cmx : src/Utils.cmx src/Uri2.cmx src/SharedTypes.cmx \
src/Query.cmx src/Log.cmx src/Infix.cmx
src/References.cmx : src/Utils.cmx src/Uri2.cmx src/TopTypes.cmx \
src/SharedTypes.cmx src/ProcessCmt.cmx src/Log.cmx src/Infix.cmx
src/Shared.cmx : src/PrintType.cmx src/Files.cmx
src/SharedTypes.cmx : src/Utils.cmx src/Uri2.cmx src/Shared.cmx \
src/Infix.cmx
src/State.cmx : src/Utils.cmx src/Uri2.cmx src/TopTypes.cmx \
src/SharedTypes.cmx src/Process_406.cmx src/Packages.cmx src/Log.cmx \
src/Infix.cmx src/FindFiles.cmx src/Files.cmx src/BuildSystem.cmx
src/TopTypes.cmx : src/Uri2.cmx src/SharedTypes.cmx
src/Uri2.cmx :
src/Uri2.cmx : src/Files.cmx
src/Utils.cmx : src/Protocol.cmx
src/vendor/Json.cmx :
src/vendor/res_outcome_printer/res_comment.cmx : \
Expand Down
93 changes: 25 additions & 68 deletions analysis/src/Commands.ml
Original file line number Diff line number Diff line change
@@ -1,24 +1,15 @@
let dumpLocations state ~package ~file ~extra =
let dumpLocations ~package ~file ~extra =
let locations =
extra.SharedTypes.locations
|> List.filter (fun (l, _) -> not l.Location.loc_ghost)
in
locations
|> List.map (fun ((location : Location.t), loc) ->
let hoverText =
Hover.newHover ~file
~getModule:(State.fileForModule state ~package)
loc
in
let hoverText = Hover.newHover ~package ~file loc in
let hover =
match hoverText with None -> "" | Some s -> String.escaped s
in
let uriLocOpt =
References.definitionForLoc ~pathsForModule:package.pathsForModule
~file ~getUri:(State.fileForUri state)
~getModule:(State.fileForModule state ~package)
loc
in
let uriLocOpt = References.definitionForLoc ~package ~file loc in
let def =
match uriLocOpt with
| None -> Protocol.null
Expand All @@ -32,41 +23,35 @@ let dumpLocations state ~package ~file ~extra =

let dump files =
Shared.cacheTypeToString := true;
let state = TopTypes.empty () in
files
|> List.iter (fun path ->
let filePath = Files.maybeConcat (Unix.getcwd ()) path in
let uri = Uri2.fromPath filePath in
let uri = Uri2.fromLocalPath path in
let result =
match State.getFullFromCmt ~state ~uri with
match ProcessCmt.getFullFromCmt ~uri with
| Error message ->
prerr_endline message;
"[]"
| Ok (package, {file; extra}) ->
dumpLocations state ~package ~file ~extra
| Ok (package, {file; extra}) -> dumpLocations ~package ~file ~extra
in
print_endline result)

let complete ~path ~line ~col ~currentFile =
let state = TopTypes.empty () in
let filePath = Files.maybeConcat (Unix.getcwd ()) path in
let uri = Uri2.fromPath filePath in
let uri = Uri2.fromLocalPath path in
let result =
match State.getFullFromCmt ~state ~uri with
match ProcessCmt.getFullFromCmt ~uri with
| Error message ->
prerr_endline message;
"[]"
| Ok (package, full) ->
let maybeText = Files.readFile currentFile in
NewCompletions.computeCompletions ~full ~maybeText ~package
~pos:(line, col) ~state
~pos:(line, col)
|> List.map Protocol.stringifyCompletionItem
|> Protocol.array
in
print_endline result

let hover state ~file ~line ~col ~extra ~package =
let open TopTypes in
let hover ~file ~line ~col ~extra ~package =
let locations =
extra.SharedTypes.locations
|> List.filter (fun (l, _) -> not l.Location.loc_ghost)
Expand All @@ -80,12 +65,7 @@ let hover state ~file ~line ~col ~extra ~package =
| SharedTypes.LModule _ | TopLevelModule _ -> true
| TypeDefinition _ | Typed _ | Constant _ | Explanation _ -> false
in
let uriLocOpt =
References.definitionForLoc ~pathsForModule:package.pathsForModule ~file
~getUri:(State.fileForUri state)
~getModule:(State.fileForModule state ~package)
loc
in
let uriLocOpt = References.definitionForLoc ~package ~file loc in
let skipZero =
match uriLocOpt with
| None -> false
Expand All @@ -98,27 +78,21 @@ let hover state ~file ~line ~col ~extra ~package =
in
if skipZero then Protocol.null
else
let hoverText =
Hover.newHover ~file ~getModule:(State.fileForModule state ~package) loc
in
let hoverText = Hover.newHover ~file ~package loc in
match hoverText with
| None -> Protocol.null
| Some s -> Protocol.stringifyHover {contents = s})

let hover ~path ~line ~col =
let state = TopTypes.empty () in
let filePath = Files.maybeConcat (Unix.getcwd ()) path in
let uri = Uri2.fromPath filePath in
let uri = Uri2.fromLocalPath path in
let result =
match State.getFullFromCmt ~state ~uri with
match ProcessCmt.getFullFromCmt ~uri with
| Error message -> Protocol.stringifyHover {contents = message}
| Ok (package, {file; extra}) ->
hover state ~file ~line ~col ~extra ~package
| Ok (package, {file; extra}) -> hover ~file ~line ~col ~extra ~package
in
print_endline result

let definition state ~file ~line ~col ~extra ~package =
let open TopTypes in
let definition ~file ~line ~col ~extra ~package =
let locations =
extra.SharedTypes.locations
|> List.filter (fun (l, _) -> not l.Location.loc_ghost)
Expand All @@ -133,12 +107,7 @@ let definition state ~file ~line ~col ~extra ~package =
| SharedTypes.LModule _ | TopLevelModule _ -> true
| TypeDefinition _ | Typed _ | Constant _ | Explanation _ -> false
in
let uriLocOpt =
References.definitionForLoc ~pathsForModule:package.pathsForModule ~file
~getUri:(State.fileForUri state)
~getModule:(State.fileForModule state ~package)
loc
in
let uriLocOpt = References.definitionForLoc ~package ~file loc in
match uriLocOpt with
| None -> Protocol.null
| Some (uri2, loc) ->
Expand All @@ -155,19 +124,15 @@ let definition state ~file ~line ~col ~extra ~package =
{uri = Uri2.toString uri2; range = Utils.cmtLocToRange loc})

let definition ~path ~line ~col =
let state = TopTypes.empty () in
let filePath = Files.maybeConcat (Unix.getcwd ()) path in
let uri = Uri2.fromPath filePath in
let uri = Uri2.fromLocalPath path in
let result =
match State.getFullFromCmt ~state ~uri with
match ProcessCmt.getFullFromCmt ~uri with
| Error _message -> Protocol.null
| Ok (package, {file; extra}) ->
definition state ~file ~line ~col ~extra ~package
| Ok (package, {file; extra}) -> definition ~file ~line ~col ~extra ~package
in
print_endline result

let references state ~file ~line ~col ~extra ~package =
let open TopTypes in
let references ~file ~line ~col ~extra ~package =
let locations =
extra.SharedTypes.locations
|> List.filter (fun (l, _) -> not l.Location.loc_ghost)
Expand All @@ -178,12 +143,7 @@ let references state ~file ~line ~col ~extra ~package =
| None -> Protocol.null
| Some (_, loc) ->
let allReferences =
References.allReferencesForLoc ~pathsForModule:package.pathsForModule
~file ~extra ~allModules:package.localModules
~getUri:(State.fileForUri state)
~getModule:(State.fileForModule state ~package)
~getExtra:(State.extraForModule state ~package)
loc
References.allReferencesForLoc ~package ~file ~extra loc
in
let allLocs =
allReferences
Expand All @@ -202,14 +162,11 @@ let references state ~file ~line ~col ~extra ~package =
"[\n" ^ (allLocs |> String.concat ",\n") ^ "\n]"

let references ~path ~line ~col =
let state = TopTypes.empty () in
let filePath = Files.maybeConcat (Unix.getcwd ()) path in
let uri = Uri2.fromPath filePath in
let uri = Uri2.fromLocalPath path in
let result =
match State.getFullFromCmt ~state ~uri with
match ProcessCmt.getFullFromCmt ~uri with
| Error _message -> Protocol.null
| Ok (package, {file; extra}) ->
references state ~file ~line ~col ~extra ~package
| Ok (package, {file; extra}) -> references ~file ~line ~col ~extra ~package
in
print_endline result

Expand Down
32 changes: 16 additions & 16 deletions analysis/src/Hover.ml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
let digConstructor ~env ~getModule path =
match Query.resolveFromCompilerPath ~env ~getModule path with
let digConstructor ~env ~package path =
match ProcessCmt.resolveFromCompilerPath ~env ~package path with
| `Not_found -> None
| `Stamp stamp -> (
match Hashtbl.find_opt env.file.stamps.types stamp with
match Hashtbl.find_opt env.qFile.stamps.types stamp with
| None -> None
| Some t -> Some (env, t))
| `Exported (env, name) -> (
match Hashtbl.find_opt env.exported.types name with
match Hashtbl.find_opt env.qExported.types name with
| None -> None
| Some stamp -> (
match Hashtbl.find_opt env.file.stamps.types stamp with
match Hashtbl.find_opt env.qFile.stamps.types stamp with
| None -> None
| Some t -> Some (env, t)))
| _ -> None
Expand Down Expand Up @@ -47,7 +47,7 @@ let showModule ~docstring ~(file : SharedTypes.file) ~name
showModuleTopLevel ~docstring ~name topLevel
| Some {item = Ident _} -> Some "Unable to resolve module reference"

let newHover ~(file : SharedTypes.file) ~getModule loc =
let newHover ~(file : SharedTypes.file) ~package loc =
match loc with
| SharedTypes.Explanation text -> Some text
| TypeDefinition (name, decl, _stamp) ->
Expand All @@ -58,7 +58,7 @@ let newHover ~(file : SharedTypes.file) ~getModule loc =
match Hashtbl.find_opt file.stamps.modules stamp with
| None -> None
| Some md -> (
match References.resolveModuleReference ~file ~getModule md with
match References.resolveModuleReference ~file ~package md with
| None -> None
| Some (file, declared) ->
let name, docstring =
Expand All @@ -68,20 +68,20 @@ let newHover ~(file : SharedTypes.file) ~getModule loc =
in
showModule ~docstring ~name ~file declared))
| LModule (GlobalReference (moduleName, path, tip)) -> (
match getModule moduleName with
match ProcessCmt.fileForModule ~package moduleName with
| None -> None
| Some file -> (
let env = Query.fileEnv file in
match Query.resolvePath ~env ~path ~getModule with
let env = ProcessCmt.fileEnv file in
match ProcessCmt.resolvePath ~env ~path ~package with
| None -> None
| Some (env, name) -> (
match Query.exportedForTip ~env name tip with
match ProcessCmt.exportedForTip ~env name tip with
| None -> None
| Some stamp -> (
match Hashtbl.find_opt file.stamps.modules stamp with
| None -> None
| Some md -> (
match References.resolveModuleReference ~file ~getModule md with
match References.resolveModuleReference ~file ~package md with
| None -> None
| Some (file, declared) ->
let name, docstring =
Expand All @@ -92,7 +92,7 @@ let newHover ~(file : SharedTypes.file) ~getModule loc =
showModule ~docstring ~name ~file declared)))))
| LModule NotFound -> None
| TopLevelModule name -> (
match getModule name with
match ProcessCmt.fileForModule ~package name with
| None -> None
| Some file ->
showModule ~docstring:file.contents.docstring ~name:file.moduleName ~file
Expand All @@ -113,11 +113,11 @@ let newHover ~(file : SharedTypes.file) ~getModule loc =
let fromType ~docstring typ =
let typeString = codeBlock (typ |> Shared.typeToString) in
let extraTypeInfo =
let env = Query.fileEnv file in
let env = ProcessCmt.fileEnv file in
match typ |> Shared.digConstructor with
| None -> None
| Some path -> (
match digConstructor ~env ~getModule path with
match digConstructor ~env ~package path with
| None -> None
| Some (_env, {docstring; name = {txt}; item = {decl}}) ->
let isUncurriedInternal =
Expand All @@ -135,7 +135,7 @@ let newHover ~(file : SharedTypes.file) ~getModule loc =
(typeString, docstring)
in
let parts =
match References.definedForLoc ~file ~getModule locKind with
match References.definedForLoc ~file ~package locKind with
| None ->
let typeString, docstring = t |> fromType ~docstring:[] in
typeString :: docstring
Expand Down
Loading