Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
1488aafa
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1488aafa
编写于
9月 08, 2017
作者:
C
Christof Marti
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Load Markdown and XML parsers on demand (fixes #33141)
上级
e15c1372
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
13 addition
and
9 deletion
+13
-9
extensions/extension-editing/src/extensionLinter.ts
extensions/extension-editing/src/extensionLinter.ts
+13
-9
未找到文件。
extensions/extension-editing/src/extensionLinter.ts
浏览文件 @
1488aafa
...
@@ -8,8 +8,7 @@ import * as path from 'path';
...
@@ -8,8 +8,7 @@ import * as path from 'path';
import
{
parseTree
,
findNodeAtLocation
,
Node
as
JsonNode
}
from
'
jsonc-parser
'
;
import
{
parseTree
,
findNodeAtLocation
,
Node
as
JsonNode
}
from
'
jsonc-parser
'
;
import
*
as
nls
from
'
vscode-nls
'
;
import
*
as
nls
from
'
vscode-nls
'
;
import
*
as
MarkdownIt
from
'
markdown-it
'
;
import
*
as
MarkdownItType
from
'
markdown-it
'
;
import
*
as
parse5
from
'
parse5
'
;
import
{
languages
,
workspace
,
Disposable
,
ExtensionContext
,
TextDocument
,
Uri
,
Diagnostic
,
Range
,
DiagnosticSeverity
,
Position
}
from
'
vscode
'
;
import
{
languages
,
workspace
,
Disposable
,
ExtensionContext
,
TextDocument
,
Uri
,
Diagnostic
,
Range
,
DiagnosticSeverity
,
Position
}
from
'
vscode
'
;
...
@@ -33,7 +32,7 @@ enum Context {
...
@@ -33,7 +32,7 @@ enum Context {
}
}
interface
TokenAndPosition
{
interface
TokenAndPosition
{
token
:
MarkdownIt
.
Token
;
token
:
MarkdownIt
Type
.
Token
;
begin
:
number
;
begin
:
number
;
end
:
number
;
end
:
number
;
}
}
...
@@ -53,7 +52,7 @@ export class ExtensionLinter {
...
@@ -53,7 +52,7 @@ export class ExtensionLinter {
private
packageJsonQ
=
new
Set
<
TextDocument
>
();
private
packageJsonQ
=
new
Set
<
TextDocument
>
();
private
readmeQ
=
new
Set
<
TextDocument
>
();
private
readmeQ
=
new
Set
<
TextDocument
>
();
private
timer
:
NodeJS
.
Timer
;
private
timer
:
NodeJS
.
Timer
;
private
markdownIt
=
new
MarkdownIt
()
;
private
markdownIt
:
MarkdownItType
.
MarkdownIt
;
constructor
(
private
context
:
ExtensionContext
)
{
constructor
(
private
context
:
ExtensionContext
)
{
this
.
disposables
.
push
(
this
.
disposables
.
push
(
...
@@ -148,8 +147,11 @@ export class ExtensionLinter {
...
@@ -148,8 +147,11 @@ export class ExtensionLinter {
}
}
const
text
=
document
.
getText
();
const
text
=
document
.
getText
();
if
(
!
this
.
markdownIt
)
{
this
.
markdownIt
=
new
(
await
import
(
'
markdown-it
'
));
}
const
tokens
=
this
.
markdownIt
.
parse
(
text
,
{});
const
tokens
=
this
.
markdownIt
.
parse
(
text
,
{});
const
tokensAndPositions
=
(
function
toTokensAndPositions
(
this
:
ExtensionLinter
,
tokens
:
MarkdownIt
.
Token
[],
begin
=
0
,
end
=
text
.
length
):
TokenAndPosition
[]
{
const
tokensAndPositions
=
(
function
toTokensAndPositions
(
this
:
ExtensionLinter
,
tokens
:
MarkdownIt
Type
.
Token
[],
begin
=
0
,
end
=
text
.
length
):
TokenAndPosition
[]
{
const
tokensAndPositions
=
tokens
.
map
<
TokenAndPosition
>
(
token
=>
{
const
tokensAndPositions
=
tokens
.
map
<
TokenAndPosition
>
(
token
=>
{
if
(
token
.
map
)
{
if
(
token
.
map
)
{
const
tokenBegin
=
document
.
offsetAt
(
new
Position
(
token
.
map
[
0
],
0
));
const
tokenBegin
=
document
.
offsetAt
(
new
Position
(
token
.
map
[
0
],
0
));
...
@@ -192,8 +194,9 @@ export class ExtensionLinter {
...
@@ -192,8 +194,9 @@ export class ExtensionLinter {
});
});
let
svgStart
:
Diagnostic
;
let
svgStart
:
Diagnostic
;
tokensAndPositions
.
filter
(
tnp
=>
tnp
.
token
.
type
===
'
text
'
&&
tnp
.
token
.
content
)
for
(
const
tnp
of
tokensAndPositions
)
{
.
map
(
tnp
=>
{
if
(
tnp
.
token
.
type
===
'
text
'
&&
tnp
.
token
.
content
)
{
const
parse5
=
await
import
(
'
parse5
'
);
const
parser
=
new
parse5
.
SAXParser
({
locationInfo
:
true
});
const
parser
=
new
parse5
.
SAXParser
({
locationInfo
:
true
});
parser
.
on
(
'
startTag
'
,
(
name
,
attrs
,
selfClosing
,
location
)
=>
{
parser
.
on
(
'
startTag
'
,
(
name
,
attrs
,
selfClosing
,
location
)
=>
{
if
(
name
===
'
img
'
)
{
if
(
name
===
'
img
'
)
{
...
@@ -220,13 +223,14 @@ export class ExtensionLinter {
...
@@ -220,13 +223,14 @@ export class ExtensionLinter {
});
});
parser
.
write
(
tnp
.
token
.
content
);
parser
.
write
(
tnp
.
token
.
content
);
parser
.
end
();
parser
.
end
();
});
}
}
this
.
diagnosticsCollection
.
set
(
document
.
uri
,
diagnostics
);
this
.
diagnosticsCollection
.
set
(
document
.
uri
,
diagnostics
);
};
};
}
}
private
locateToken
(
text
:
string
,
begin
:
number
,
end
:
number
,
token
:
MarkdownIt
.
Token
,
content
:
string
)
{
private
locateToken
(
text
:
string
,
begin
:
number
,
end
:
number
,
token
:
MarkdownIt
Type
.
Token
,
content
:
string
)
{
if
(
content
)
{
if
(
content
)
{
const
tokenBegin
=
text
.
indexOf
(
content
,
begin
);
const
tokenBegin
=
text
.
indexOf
(
content
,
begin
);
if
(
tokenBegin
!==
-
1
)
{
if
(
tokenBegin
!==
-
1
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录