Skip to content

Commit f667fa5

Browse files
committed
试图提高加载速度
1 parent 67549d6 commit f667fa5

File tree

7 files changed

+105
-67
lines changed

7 files changed

+105
-67
lines changed

EmmyLua-Common/src/main/ext/com/tang/intellij/lua/fs/fileManager.kt

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,6 @@ interface IFileManager {
4343
class FileManager(project: Project) : IFileManager {
4444
private val providers = mutableListOf<IFileScopeProvider>()
4545

46-
init {
47-
addProvider(ConfigurationFileScopeProvider(project))
48-
}
49-
5046
override fun addProvider(provider: IFileScopeProvider) {
5147
providers.add(provider)
5248
}
@@ -79,40 +75,45 @@ class FileManager(project: Project) : IFileManager {
7975
}
8076

8177
fun collectFiles(file: File, list: MutableList<FileURI>) {
82-
if (file.isFile && isInclude(file)) {
83-
list.add(FileURI.file(file))
78+
val fileUri = FileURI.file(file)
79+
if (file.isFile && isInclude(fileUri)) {
80+
list.add(fileUri)
8481
} else if (file.isDirectory) {
8582
file.listFiles()?.forEach { collectFiles(it, list) }
8683
}
8784
}
8885
}
8986

90-
class ConfigurationFileScopeProvider(private val project: Project) : IFileScopeProvider {
91-
override fun isInclude(uri: FileURI): ThreeState {
92-
val configurationManager = IConfigurationManager.get(project)
93-
return configurationManager.isInclude(uri)
94-
}
95-
96-
override fun isExclude(uri: FileURI): ThreeState {
97-
val configurationManager = IConfigurationManager.get(project)
98-
return configurationManager.isExclude(uri)
99-
}
100-
101-
override fun findAllFiles(manager: FileManager): List<IFileCollection> {
102-
val configurationManager = IConfigurationManager.get(project)
103-
val collections = mutableListOf<IFileCollection>()
104-
for (source in configurationManager.sourceRoots) {
105-
val dir = source.absoluteDir ?: continue
106-
dir.toFile()?.let { file ->
107-
val files = mutableListOf<FileURI>()
108-
manager.collectFiles(file, files)
109-
collections.add(FileCollection(dir, files))
110-
}
111-
}
112-
return collections
113-
}
114-
115-
override fun getSourceRoots(project: Project): Array<ISourceRoot> {
116-
return IConfigurationManager.get(project).sourceRoots
117-
}
118-
}
87+
//class ConfigurationFileScopeProvider(private val project: Project) : IFileScopeProvider {
88+
// override fun isInclude(uri: FileURI): ThreeState {
89+
// val configurationManager = IConfigurationManager.get(project)
90+
// return configurationManager.isInclude(uri)
91+
// }
92+
//
93+
// override fun isExclude(uri: FileURI): ThreeState {
94+
// val configurationManager = IConfigurationManager.get(project)
95+
// return configurationManager.isExclude(uri)
96+
// }
97+
//
98+
// override fun isIncludeDirectory(uri: FileURI): ThreeState {
99+
// TODO("Not yet implemented")
100+
// }
101+
//
102+
// override fun findAllFiles(manager: FileManager): List<IFileCollection> {
103+
// val configurationManager = IConfigurationManager.get(project)
104+
// val collections = mutableListOf<IFileCollection>()
105+
// for (source in configurationManager.sourceRoots) {
106+
// val dir = source.absoluteDir ?: continue
107+
// dir.toFile()?.let { file ->
108+
// val files = mutableListOf<FileURI>()
109+
// manager.collectFiles(file, files)
110+
// collections.add(FileCollection(dir, files))
111+
// }
112+
// }
113+
// return collections
114+
// }
115+
//
116+
// override fun getSourceRoots(project: Project): Array<ISourceRoot> {
117+
// return IConfigurationManager.get(project).sourceRoots
118+
// }
119+
//}

EmmyLua-LS/src/main/kotlin/com/tang/vscode/LuaLanguageServer.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,17 @@ class LuaLanguageServer : LanguageServer, LanguageClientAware {
5353
}
5454

5555
override fun initialize(params: InitializeParams): CompletableFuture<InitializeResult> {
56-
if (params.rootUri != null)
57-
workspaceService.addRoot(params.rootUri)
58-
56+
for (workspace in params.workspaceFolders) {
57+
workspaceService.addRoot(workspace.uri)
58+
}
5959
initIntellijEnv()
6060

6161
val json = params.initializationOptions as? JsonObject
6262
if (json != null) {
6363
val stdFolder = json["stdFolder"] as? JsonPrimitive
64-
if (stdFolder != null && stdFolder.isString)
64+
if (stdFolder != null && stdFolder.isString) {
6565
workspaceService.addRoot(stdFolder.asString)
66-
val workspaceFolders = json["workspaceFolders"] as? JsonArray
67-
workspaceFolders?.forEach { workspaceService.addRoot(it.asString) }
66+
}
6867
val clientType = json["client"] as? JsonPrimitive
6968
if (clientType != null)
7069
VSCodeSettings.clientType = clientType.asString
@@ -125,7 +124,8 @@ class LuaLanguageServer : LanguageServer, LanguageClientAware {
125124

126125
override fun initialized(params: InitializedParams) {
127126
val options = DidChangeWatchedFilesRegistrationOptions(listOf(FileSystemWatcher("**/*")))
128-
val didChangeWatchedFiles = Registration(UUID.randomUUID().toString(), "workspace/didChangeWatchedFiles", options)
127+
val didChangeWatchedFiles =
128+
Registration(UUID.randomUUID().toString(), "workspace/didChangeWatchedFiles", options)
129129
client?.registerCapability(RegistrationParams(listOf(didChangeWatchedFiles)))
130130
val didChangeWorkspaceFolders = Registration(WORKSPACE_FOLDERS_CAPABILITY_ID, WORKSPACE_FOLDERS_CAPABILITY_NAME)
131131
client?.registerCapability(RegistrationParams(listOf(didChangeWorkspaceFolders)))

EmmyLua-LS/src/main/kotlin/com/tang/vscode/LuaWorkspaceService.kt

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,23 @@ class LuaWorkspaceService : WorkspaceService, IWorkspace {
9595
}
9696

9797
fun initConfigFiles(files: Array<EmmyConfigurationSource>) {
98-
configurationManager.init(files)
98+
if (files.isNotEmpty()) {
99+
configurationManager.init(files)
100+
fileScopeProvider.configManager = configurationManager
101+
for (source in configurationManager.sourceRoots) {
102+
if (source.absoluteDir != null) {
103+
val rootList = fileScopeProvider.getRootIncludeConfigFiles(source.absoluteDir!!)
104+
for (root in rootList) {
105+
fileScopeProvider.removeRoot(root)
106+
}
107+
}
108+
}
109+
for (source in configurationManager.sourceRoots) {
110+
if (source.absoluteDir != null) {
111+
fileScopeProvider.addRoot(source.absoluteDir!!)
112+
}
113+
}
114+
}
99115
}
100116

101117
@JsonRequest("emmy/updateConfig")
@@ -319,12 +335,12 @@ class LuaWorkspaceService : WorkspaceService, IWorkspace {
319335
}
320336

321337
private fun loadWorkspace(monitor: IProgressMonitor) {
322-
monitor.setProgress("load workspace folders", 0f)
323-
val collections = fileManager.findAllFiles()
324-
var totalFileCount = 0f
325-
var processedCount = 0f
326-
collections.forEach { totalFileCount += it.files.size }
327338
try {
339+
monitor.setProgress("load workspace folders", 0f)
340+
val collections = fileManager.findAllFiles()
341+
var totalFileCount = 0f
342+
var processedCount = 0f
343+
collections.forEach { totalFileCount += it.files.size }
328344
for (collection in collections) {
329345
addRoot(collection.root)
330346
for (uri in collection.files) {

EmmyLua-LS/src/main/kotlin/com/tang/vscode/WorkspaceRootFileScopeProvider.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.tang.lsp.FileURI
1313
class WorkspaceRootFileScopeProvider : IFileScopeProvider {
1414

1515
private val roots = mutableSetOf<WorkspaceRoot>()
16+
var configManager: IConfigurationManager? = null
1617

1718
fun addRoot(uri: FileURI) {
1819
roots.add(WorkspaceRoot(uri))
@@ -26,7 +27,7 @@ class WorkspaceRootFileScopeProvider : IFileScopeProvider {
2627
if (!VSCodeSettings.matchFile(uri.name)) {
2728
return ThreeState.YES
2829
}
29-
return ThreeState.UNSURE
30+
return configManager?.isExclude(uri) ?: ThreeState.UNSURE
3031
}
3132

3233
override fun isInclude(uri: FileURI): ThreeState {
@@ -35,12 +36,18 @@ class WorkspaceRootFileScopeProvider : IFileScopeProvider {
3536
}
3637
for (root in roots) {
3738
if (root.isInclude(uri) === ThreeState.YES) {
38-
return ThreeState.YES
39+
return configManager?.isInclude(uri) ?: ThreeState.YES
3940
}
4041
}
4142
return ThreeState.UNSURE
4243
}
4344

45+
fun getRootIncludeConfigFiles(uri: FileURI): List<FileURI> {
46+
return roots.filter { it.isInclude(uri) == ThreeState.YES }
47+
.map { it.absoluteDir }
48+
.toList()
49+
}
50+
4451
override fun findAllFiles(manager: FileManager): List<IFileCollection> {
4552
val collections = mutableListOf<IFileCollection>()
4653
for (root in roots) {
@@ -66,7 +73,7 @@ class WorkspaceRootFileScopeProvider : IFileScopeProvider {
6673
}
6774

6875
class WorkspaceRoot(
69-
override val absoluteDir: FileURI
76+
override val absoluteDir: FileURI
7077
) : ISourceRoot {
7178
override fun relative(path: String): String? {
7279
val f = FileURI(path, false)

EmmyLua-LS/src/main/kotlin/com/tang/vscode/configuration/ConfigurationManager.kt

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ class ConfigurationManager : IConfigurationManager {
3131

3232
private val list = mutableListOf<ConfigurationStructure>()
3333

34-
private val main: ConfigurationStructure? get() {
35-
return list.firstOrNull()
36-
}
34+
private val main: ConfigurationStructure?
35+
get() {
36+
return list.firstOrNull()
37+
}
3738

3839
fun init(configurationSourceList: Array<EmmyConfigurationSource>) {
3940
configurationSourceList.forEach {
@@ -49,11 +50,12 @@ class ConfigurationManager : IConfigurationManager {
4950
list.remove(configuration)
5051
}
5152

52-
override val sourceRoots: Array<ISourceRoot> get() {
53-
val sources = mutableListOf<ISourceRoot>()
54-
list.forEach { sources.addAll(it.sourceRoots) }
55-
return sources.toTypedArray()
56-
}
53+
override val sourceRoots: Array<ISourceRoot>
54+
get() {
55+
val sources = mutableListOf<ISourceRoot>()
56+
list.forEach { sources.addAll(it.sourceRoots) }
57+
return sources.toTypedArray()
58+
}
5759

5860
override val completionCaseSensitive: Boolean
5961
get() = main?.editor?.completionCaseSensitive ?: false
@@ -64,23 +66,31 @@ class ConfigurationManager : IConfigurationManager {
6466

6567
override fun isInclude(uri: FileURI): ThreeState {
6668
for (structure in list) {
67-
for (root in structure.sourceRoots) {
68-
if (root.isInclude(uri) == ThreeState.YES) {
69-
return ThreeState.YES
69+
if (structure.source.workspaceURI.contains(uri)) {
70+
for (root in structure.sourceRoots) {
71+
if (root.isInclude(uri) == ThreeState.YES) {
72+
return ThreeState.YES
73+
}
7074
}
75+
return ThreeState.UNSURE
7176
}
7277
}
73-
return ThreeState.UNSURE
78+
79+
return ThreeState.YES
7480
}
7581

7682
override fun isExclude(uri: FileURI): ThreeState {
7783
for (structure in list) {
78-
for (root in structure.sourceRoots) {
79-
if (root.isExclude(uri) == ThreeState.YES) {
80-
return ThreeState.YES
84+
if (structure.source.workspaceURI.contains(uri)) {
85+
for (root in structure.sourceRoots) {
86+
if (root.isExclude(uri) == ThreeState.YES) {
87+
return ThreeState.YES
88+
}
8189
}
90+
return ThreeState.UNSURE
8291
}
8392
}
93+
8494
return ThreeState.UNSURE
8595
}
8696

EmmyLua-LS/src/main/kotlin/com/tang/vscode/configuration/configurationStructures.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ data class Editor(val completionCaseSensitive: Boolean = false) {
9797
}
9898

9999
class ConfigurationStructure(val source: EmmyConfigurationSource) : IConfigurationStructure {
100-
var luaVersion = "lua5.3"
100+
var luaVersion = "lua5.4"
101101
override val sourceRoots = mutableListOf<SourceRoot>()
102102
var editor: Editor? = null
103103

EmmyLua-LS/src/main/kotlin/com/tang/vscode/rpc.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ data class EmmyConfigurationSource(val uri: String, val workspace: String) {
5353
return FileURI.uri(uri, false)
5454
}
5555

56+
val workspaceURI: FileURI get() {
57+
return FileURI.uri(workspace, true)
58+
}
59+
5660
override fun equals(other: Any?): Boolean {
5761
return other is EmmyConfigurationSource && other.uri == uri
5862
}

0 commit comments

Comments
 (0)