Phasor 3.3.0
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:
17 {
18 std::string message;
19 size_t startLine;
21 size_t endLine;
22 size_t endColumn;
23 };
24
26 {
27 std::string name;
29 std::string signature;
30 };
31
32 struct Location
33 {
34 std::string uri;
35 size_t line;
36 size_t column;
37 };
38
40 {
41 std::string uri;
42 std::string source;
43 std::vector<size_t> lineStartOffsets;
44 std::unique_ptr<AST::Program> program;
45 std::vector<Diagnostic> diagnostics;
46 std::unordered_map<std::string, SymbolInfo> globalSymbols;
47 };
48
49 LSP() = default;
50 ~LSP() = default;
51
52 void openDocument(const std::string &uri, const std::string &text);
53 void changeDocument(const std::string &uri, const std::string &newText);
54 void closeDocument(const std::string &uri);
55
56 std::vector<Diagnostic> getDiagnostics(const std::string &uri) const;
57
58 AST::Node *findNodeAtPosition(const std::string &uri, size_t line, size_t column);
59
60 std::optional<std::string> getHover(const std::string &uri, size_t line, size_t column);
61
62 std::optional<Location> getDefinition(const std::string &uri, size_t line, size_t column);
63
64 private:
65 std::unordered_map<std::string, DocumentState> documents;
66
67 void compile(DocumentState &doc);
70 AST::Node *walkForNode(const DocumentState &doc, size_t line, size_t col);
71 std::string symbolNameAt(AST::Node *node) const;
72};
73} // 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:65
void computeLineOffsets(DocumentState &doc)
Definition LSP.cpp:385
The Phasor Programming Language and Runtime.
Definition AST.hpp:12
AST Node.
Definition AST.hpp:45
std::string message
Definition LSP.hpp:18
std::unordered_map< std::string, SymbolInfo > globalSymbols
Definition LSP.hpp:46
std::vector< size_t > lineStartOffsets
Definition LSP.hpp:43
std::unique_ptr< AST::Program > program
Definition LSP.hpp:44
std::vector< Diagnostic > diagnostics
Definition LSP.hpp:45
std::string uri
Definition LSP.hpp:34
std::string signature
Definition LSP.hpp:29
AST::Node * declaration
Definition LSP.hpp:28
std::string name
Definition LSP.hpp:27