1/**************************************************************************/
2/* gdscript_text_document.h */
3/**************************************************************************/
4/* This file is part of: */
5/* GODOT ENGINE */
6/* https://godotengine.org */
7/**************************************************************************/
8/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
9/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
10/* */
11/* Permission is hereby granted, free of charge, to any person obtaining */
12/* a copy of this software and associated documentation files (the */
13/* "Software"), to deal in the Software without restriction, including */
14/* without limitation the rights to use, copy, modify, merge, publish, */
15/* distribute, sublicense, and/or sell copies of the Software, and to */
16/* permit persons to whom the Software is furnished to do so, subject to */
17/* the following conditions: */
18/* */
19/* The above copyright notice and this permission notice shall be */
20/* included in all copies or substantial portions of the Software. */
21/* */
22/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
23/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
24/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
25/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
26/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
27/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
28/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
29/**************************************************************************/
30
31#ifndef GDSCRIPT_TEXT_DOCUMENT_H
32#define GDSCRIPT_TEXT_DOCUMENT_H
33
34#include "godot_lsp.h"
35
36#include "core/io/file_access.h"
37#include "core/object/ref_counted.h"
38
39class GDScriptTextDocument : public RefCounted {
40 GDCLASS(GDScriptTextDocument, RefCounted)
41protected:
42 static void _bind_methods();
43
44 Ref<FileAccess> file_checker;
45
46 void didOpen(const Variant &p_param);
47 void didClose(const Variant &p_param);
48 void didChange(const Variant &p_param);
49 void willSaveWaitUntil(const Variant &p_param);
50 void didSave(const Variant &p_param);
51
52 void sync_script_content(const String &p_path, const String &p_content);
53 void show_native_symbol_in_editor(const String &p_symbol_id);
54
55 Array native_member_completions;
56
57private:
58 Array find_symbols(const lsp::TextDocumentPositionParams &p_location, List<const lsp::DocumentSymbol *> &r_list);
59 lsp::TextDocumentItem load_document_item(const Variant &p_param);
60 void notify_client_show_symbol(const lsp::DocumentSymbol *symbol);
61
62public:
63 Variant nativeSymbol(const Dictionary &p_params);
64 Array documentSymbol(const Dictionary &p_params);
65 Array completion(const Dictionary &p_params);
66 Dictionary resolve(const Dictionary &p_params);
67 Dictionary rename(const Dictionary &p_params);
68 Variant prepareRename(const Dictionary &p_params);
69 Array references(const Dictionary &p_params);
70 Array foldingRange(const Dictionary &p_params);
71 Array codeLens(const Dictionary &p_params);
72 Array documentLink(const Dictionary &p_params);
73 Array colorPresentation(const Dictionary &p_params);
74 Variant hover(const Dictionary &p_params);
75 Array definition(const Dictionary &p_params);
76 Variant declaration(const Dictionary &p_params);
77 Variant signatureHelp(const Dictionary &p_params);
78
79 void initialize();
80
81 GDScriptTextDocument();
82};
83
84#endif // GDSCRIPT_TEXT_DOCUMENT_H
85