Skip to content

Commit 83a0d34

Browse files
committed
优化语言服务
1 parent af83ead commit 83a0d34

File tree

6 files changed

+21
-23
lines changed

6 files changed

+21
-23
lines changed

3rd/uriparser/src/config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444
#define PACKAGE_VERSION "0.9.5"
4545

46-
/* #undef HAVE_WPRINTF */
46+
#define HAVE_WPRINTF
4747
/* #undef HAVE_REALLOCARRAY */
4848

4949

CodeFormatServer/src/LanguageClient.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,13 @@ void LanguageClient::UpdateFile(std::string_view uri, vscode::Range range, std::
102102
}
103103
}
104104

105-
void LanguageClient::ReleaseFile(std::string_view uri)
105+
void LanguageClient::ParseFile(std::string_view uri)
106106
{
107107
auto filename = url::UrlToFilePath(uri);
108108
auto it = _fileMap.find(filename);
109109
if (it != _fileMap.end())
110110
{
111-
_fileMap.erase(it);
111+
it->second->MakeParser();
112112
}
113113
}
114114

CodeFormatServer/src/LanguageService.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ std::shared_ptr<vscode::Serializable> LanguageService::OnDidChange(
137137
{
138138
for (auto& content : param->contentChanges)
139139
{
140-
// LanguageClient::GetInstance().ReleaseFile(param->textDocument.uri);
141140
if (content.range.has_value())
142141
{
143142
LanguageClient::GetInstance().UpdateFile(param->textDocument.uri, content.range.value(),
@@ -149,15 +148,16 @@ std::shared_ptr<vscode::Serializable> LanguageService::OnDidChange(
149148
}
150149
}
151150

151+
LanguageClient::GetInstance().ParseFile(param->textDocument.uri);
152152
LanguageClient::GetInstance().DiagnosticFile(param->textDocument.uri);
153153
return nullptr;
154154
}
155155

156156
std::shared_ptr<vscode::Serializable> LanguageService::OnDidOpen(
157157
std::shared_ptr<vscode::DidOpenTextDocumentParams> param)
158158
{
159-
// LanguageClient::GetInstance().ReleaseFile(param->textDocument.uri);
160159
LanguageClient::GetInstance().UpdateFile(param->textDocument.uri, {}, std::move(param->textDocument.text));
160+
LanguageClient::GetInstance().ParseFile(param->textDocument.uri);
161161
LanguageClient::GetInstance().DiagnosticFile(param->textDocument.uri);
162162
return nullptr;
163163
}
@@ -199,7 +199,7 @@ std::shared_ptr<vscode::Serializable> LanguageService::OnFormatting(
199199
std::shared_ptr<vscode::Serializable> LanguageService::OnClose(
200200
std::shared_ptr<vscode::DidCloseTextDocumentParams> param)
201201
{
202-
LanguageClient::GetInstance().ReleaseFile(param->textDocument.uri);
202+
LanguageClient::GetInstance().ParseFile(param->textDocument.uri);
203203

204204
return nullptr;
205205
}

CodeFormatServer/src/VirtualFile/VirtualFile.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,44 +15,42 @@ void VirtualFile::UpdateFile(vscode::Range range, std::string&& content)
1515
return UpdateFile(std::move(content));
1616
}
1717

18+
std::string text;
19+
text.swap(_luaFile->GetSource());
1820
auto startOffset = _luaFile->GetOffsetFromPosition(range.start.line, range.start.character);
1921
auto endOffset = _luaFile->GetOffsetFromPosition(range.end.line, range.end.character);
20-
auto oldSize = _text.size();
22+
auto oldSize = text.size();
2123
auto newSize = oldSize + (content.size() - (endOffset - startOffset));
22-
if (newSize > _text.capacity())
24+
if (newSize > text.capacity())
2325
{
2426
auto suitableCapacity = newSize + 4096;
25-
_text.reserve(suitableCapacity);
27+
text.reserve(suitableCapacity);
2628
}
2729

2830
if(newSize > oldSize)
2931
{
30-
_text.resize(newSize);
31-
std::copy_backward(_text.begin() + endOffset, _text.begin() + oldSize, _text.end());
32-
std::copy(content.begin(), content.end(), _text.begin() + startOffset);
32+
text.resize(newSize);
33+
std::copy_backward(text.begin() + endOffset, text.begin() + oldSize, text.end());
34+
std::copy(content.begin(), content.end(), text.begin() + startOffset);
3335
}
3436
else
3537
{
36-
std::copy(_text.begin() + endOffset, _text.end(), _text.begin() + startOffset + content.size());
38+
std::copy(text.begin() + endOffset, text.end(), text.begin() + startOffset + content.size());
3739
if(content.size() > 0)
3840
{
39-
std::copy(content.begin(), content.end(), _text.begin() + startOffset);
41+
std::copy(content.begin(), content.end(), text.begin() + startOffset);
4042
}
41-
_text.resize(newSize);
43+
text.resize(newSize);
4244
}
4345

44-
std::string fileText = _text;
4546
_luaFile = std::make_shared<LuaFile>(std::filesystem::path(url::UrlToFilePath(_fileUri)).filename().string(),
46-
std::move(fileText));
47-
MakeParser();
47+
std::move(text));
4848
}
4949

5050
void VirtualFile::UpdateFile(std::string&& text)
5151
{
52-
_text = text;
5352
_luaFile = std::make_shared<LuaFile>(std::filesystem::path(url::UrlToFilePath(_fileUri)).filename().string(),
5453
std::move(text));
55-
MakeParser();
5654
}
5755

5856
void VirtualFile::Reset()

include/CodeFormatServer/VirtualFile/VirtualFile.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ class VirtualFile
1616
void Reset();
1717

1818
std::shared_ptr<LuaParser> GetLuaParser();
19-
private:
19+
2020
void MakeParser();
21+
private:
2122

2223
std::string _fileUri;
23-
std::string _text;
2424
std::shared_ptr<LuaFile> _luaFile;
2525
std::shared_ptr<LuaParser> _luaParser;
2626

include/LuaParser/LuaFile.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class LuaFile
2121

2222
void PushLine(int offset);
2323

24-
std::string_view GetSource();
24+
std::string& GetSource();
2525

2626
void SetTotalLine(int line);
2727

0 commit comments

Comments
 (0)