Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
7465d39c
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7465d39c
编写于
9月 19, 2016
作者:
M
Martin Aeschlimann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[html] htmlDocument cache
上级
1e35d6c3
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
96 addition
and
10 deletion
+96
-10
extensions/html/server/src/htmlServerMain.ts
extensions/html/server/src/htmlServerMain.ts
+13
-10
extensions/html/server/src/languageModelCache.ts
extensions/html/server/src/languageModelCache.ts
+83
-0
未找到文件。
extensions/html/server/src/htmlServerMain.ts
浏览文件 @
7465d39c
...
...
@@ -4,12 +4,11 @@
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
{
createConnection
,
IConnection
,
TextDocuments
,
TextDocument
,
InitializeParams
,
InitializeResult
}
from
'
vscode-languageserver
'
;
import
{
createConnection
,
IConnection
,
TextDocuments
,
InitializeParams
,
InitializeResult
}
from
'
vscode-languageserver
'
;
import
{
HTMLDocument
,
getLanguageService
,
CompletionConfiguration
,
HTMLFormatConfiguration
}
from
'
vscode-html-languageservice
'
;
import
{
getLanguageModelCache
}
from
'
./languageModelCache
'
;
import
*
as
nls
from
'
vscode-nls
'
;
nls
.
config
(
process
.
env
[
'
VSCODE_NLS_CONFIG
'
]);
...
...
@@ -27,6 +26,14 @@ let documents: TextDocuments = new TextDocuments();
// for open, change and close text document events
documents
.
listen
(
connection
);
let
htmlDocuments
=
getLanguageModelCache
<
HTMLDocument
>
(
10
,
60
,
document
=>
getLanguageService
().
parseHTMLDocument
(
document
));
documents
.
onDidClose
(
e
=>
{
htmlDocuments
.
onDocumentRemoved
(
e
.
document
);
});
connection
.
onShutdown
(()
=>
{
htmlDocuments
.
dispose
();
});
let
workspacePath
:
string
;
// After the server has started the client sends an initilize request. The server receives
...
...
@@ -67,20 +74,16 @@ connection.onDidChangeConfiguration((change) => {
languageSettings
=
settings
.
html
;
});
function
getHTMLDocument
(
document
:
TextDocument
):
HTMLDocument
{
return
languageService
.
parseHTMLDocument
(
document
);
}
connection
.
onCompletion
(
textDocumentPosition
=>
{
let
document
=
documents
.
get
(
textDocumentPosition
.
textDocument
.
uri
);
let
htmlDocument
=
getHTMLDocumen
t
(
document
);
let
htmlDocument
=
htmlDocuments
.
ge
t
(
document
);
let
options
=
languageSettings
&&
languageSettings
.
suggest
;
return
languageService
.
doComplete
(
document
,
textDocumentPosition
.
position
,
htmlDocument
,
options
);
});
connection
.
onDocumentHighlight
(
documentHighlightParams
=>
{
let
document
=
documents
.
get
(
documentHighlightParams
.
textDocument
.
uri
);
let
htmlDocument
=
getHTMLDocumen
t
(
document
);
let
htmlDocument
=
htmlDocuments
.
ge
t
(
document
);
return
languageService
.
findDocumentHighlights
(
document
,
documentHighlightParams
.
position
,
htmlDocument
);
});
...
...
extensions/html/server/src/languageModelCache.ts
0 → 100644
浏览文件 @
7465d39c
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
{
TextDocument
}
from
'
vscode-languageserver
'
;
export
interface
LanguageModelCache
<
T
>
{
get
(
document
:
TextDocument
):
T
;
onDocumentRemoved
(
document
:
TextDocument
):
void
;
dispose
():
void
;
}
export
function
getLanguageModelCache
<
T
>
(
maxEntries
:
number
,
cleanupIntervalTimeInSec
:
number
,
parse
:
(
document
:
TextDocument
)
=>
T
)
:
LanguageModelCache
<
T
>
{
let
languageModels
:
{
[
uri
:
string
]:
{
version
:
number
,
languageId
:
string
,
cTime
:
number
,
languageModel
:
T
}}
=
{};
let
nModels
=
0
;
let
cleanupInterval
=
void
0
;
if
(
cleanupIntervalTimeInSec
>
0
)
{
cleanupInterval
=
setInterval
(()
=>
{
let
cutoffTime
=
Date
.
now
()
-
cleanupIntervalTimeInSec
*
1000
;
let
uris
=
Object
.
keys
(
languageModels
);
for
(
let
uri
of
uris
)
{
let
languageModelInfo
=
languageModels
[
uri
];
if
(
languageModelInfo
.
cTime
<
cutoffTime
)
{
delete
languageModels
[
uri
];
nModels
--
;
}
}
},
cleanupIntervalTimeInSec
*
1000
);
}
return
{
get
(
document
:
TextDocument
)
:
T
{
let
version
=
document
.
version
;
let
languageId
=
document
.
languageId
;
let
languageModelInfo
=
languageModels
[
document
.
uri
];
if
(
languageModelInfo
&&
languageModelInfo
.
version
===
version
&&
languageModelInfo
.
languageId
===
languageId
)
{
languageModelInfo
.
cTime
=
Date
.
now
();
return
languageModelInfo
.
languageModel
;
}
let
languageModel
=
parse
(
document
);
languageModels
[
document
.
uri
]
=
{
languageModel
,
version
,
languageId
,
cTime
:
Date
.
now
()};
if
(
!
languageModelInfo
)
{
nModels
++
;
}
if
(
nModels
===
maxEntries
)
{
let
oldestTime
=
Number
.
MAX_VALUE
;
let
oldestUri
=
null
;
for
(
let
uri
in
languageModels
)
{
let
languageModelInfo
=
languageModels
[
uri
];
if
(
languageModelInfo
.
cTime
<
oldestTime
)
{
oldestUri
=
uri
;
oldestTime
=
languageModelInfo
.
cTime
;
}
}
if
(
oldestUri
)
{
delete
languageModels
[
oldestUri
];
nModels
--
;
}
}
return
languageModel
;
},
onDocumentRemoved
(
document
:
TextDocument
)
{
let
uri
=
document
.
uri
;
if
(
languageModels
[
uri
])
{
delete
languageModels
[
uri
];
nModels
--
;
}
},
dispose
()
{
if
(
typeof
cleanupInterval
!==
'
undefined
'
)
{
clearInterval
(
cleanupInterval
);
cleanupInterval
=
void
0
;
languageModels
=
{};
nModels
=
0
;
}
}
};
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录