Phasor 3.1.1
Stack VM based Programming Language
Loading...
Searching...
No Matches
LSP.hpp
Go to the documentation of this file.
1#pragma once
2#include "../../AST/AST.hpp"
5#include <string>
6#include <vector>
7#include <unordered_map>
8#include <memory>
9#include <optional>
10
11namespace Phasor
12{
13class LSP
14{
15 public:
16
18 {
19 std::string message;
20 size_t startLine;
22 size_t endLine;
23 size_t endColumn;
24 };
25
27 {
28 std::string name;
30 std::string signature;
31 };
32
33 struct Location
34 {
35 std::string uri;
36 size_t line;
37 size_t column;
38 };
39
41 {
42 std::string uri;
43 std::string source;
44 std::vector<size_t> lineStartOffsets;
45 std::unique_ptr<AST::Program> program;
46 std::vector<Diagnostic> diagnostics;
47 std::unordered_map<std::string, SymbolInfo> globalSymbols;
48 };
49
50 LSP() = default;
51 ~LSP() = default;
52
53 void openDocument(const std::string &uri, const std::string &text);
54 void changeDocument(const std::string &uri, const std::string &newText);
55 void closeDocument(const std::string &uri);
56
57 std::vector<Diagnostic> getDiagnostics(const std::string &uri) const;
58
59 AST::Node *findNodeAtPosition(const std::string &uri, size_t line, size_t column);
60
61 std::optional<std::string> getHover(const std::string &uri, size_t line, size_t column);
62
63 std::optional<Location> getDefinition(const std::string &uri, size_t line, size_t column);
64
65 private:
66 std::unordered_map<std::string, DocumentState> documents;
67
68 void compile(DocumentState &doc);
71 AST::Node *walkForNode(const DocumentState &doc, size_t line, size_t col);
72 std::string symbolNameAt(AST::Node *node) const;
73};
74} // namespace Phasor
LSP()=default
AST::Node * walkForNode(const DocumentState &doc, size_t line, size_t col)
Definition LSP.cpp:358
std::optional< Location > getDefinition(const std::string &uri, size_t line, size_t column)
Definition LSP.cpp:143
void buildGlobalSymbols(DocumentState &doc)
Definition LSP.cpp:394
void openDocument(const std::string &uri, const std::string &text)
Definition LSP.cpp:71
void closeDocument(const std::string &uri)
Definition LSP.cpp:96
AST::Node * findNodeAtPosition(const std::string &uri, size_t line, size_t column)
Definition LSP.cpp:109
void compile(DocumentState &doc)
Definition LSP.cpp:427
~LSP()=default
std::vector< Diagnostic > getDiagnostics(const std::string &uri) const
Definition LSP.cpp:101
std::string symbolNameAt(AST::Node *node) const
Definition LSP.cpp:368
std::optional< std::string > getHover(const std::string &uri, size_t line, size_t column)
Definition LSP.cpp:117
void changeDocument(const std::string &uri, const std::string &newText)
Definition LSP.cpp:80
std::unordered_map< std::string, DocumentState > documents
Definition LSP.hpp:66
void computeLineOffsets(DocumentState &doc)
Definition LSP.cpp:385
The Phasor Programming Language and Runtime.
Definition AST.hpp:11
AST Node.
Definition AST.hpp:44
std::string message
Definition LSP.hpp:19
std::unordered_map< std::string, SymbolInfo > globalSymbols
Definition LSP.hpp:47
std::vector< size_t > lineStartOffsets
Definition LSP.hpp:44
std::unique_ptr< AST::Program > program
Definition LSP.hpp:45
std::vector< Diagnostic > diagnostics
Definition LSP.hpp:46
std::string uri
Definition LSP.hpp:35
std::string signature
Definition LSP.hpp:30
AST::Node * declaration
Definition LSP.hpp:29
std::string name
Definition LSP.hpp:28