use "files"
use "logger"
use rpc_data = "../../rpc/data"
use tasks = "../../../analyzer/tasks"
use "../.."
class Definition
let _log: Logger[String]
let _config: ServerConfig
new create(log: Logger[String], config: ServerConfig) =>
_log = log
_config = config
fun apply(
auth: FileAuth,
workspaces: Workspaces,
task_id: USize,
params: rpc_data.DefinitionParams,
canonical_path: FilePath)
: ((ServerState | None), (I32 | None))
=>
_log(Fine) and _log.log(
task_id.string() + ": request definition: " +
params.textDocument().uri() + ":" + params.position().line().string() +
":" + params.position().character().string())
try
let uri = params.textDocument().uri()
let workspace = workspaces.get_workspace(auth, _config, canonical_path)?
let position = params.position()
tasks.FindDefinition(
_log,
workspace.analyze,
task_id,
canonical_path,
USize.from[I128](position.line()),
USize.from[I128](position.character()),
workspace.server)
else
_log(Error) and _log.log(task_id.string() + ": error getting workspace")
end
(None, None)