Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
56d1a02b
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,发现更多精彩内容 >>
未验证
提交
56d1a02b
编写于
6月 13, 2019
作者:
M
Martin Aeschlimann
提交者:
GitHub
6月 13, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #72763 from jk21/package-json-info
Package json info
上级
1c45c4c3
4284a8ff
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
51 addition
and
56 deletion
+51
-56
extensions/npm/src/features/packageJSONContribution.ts
extensions/npm/src/features/packageJSONContribution.ts
+51
-56
未找到文件。
extensions/npm/src/features/packageJSONContribution.ts
浏览文件 @
56d1a02b
...
...
@@ -9,6 +9,7 @@ import { XHRRequest } from 'request-light';
import
{
Location
}
from
'
jsonc-parser
'
;
import
{
textToMarkedString
}
from
'
./markedTextUtil
'
;
import
*
as
cp
from
'
child_process
'
;
import
*
as
nls
from
'
vscode-nls
'
;
const
localize
=
nls
.
loadMessageBundle
();
...
...
@@ -229,38 +230,29 @@ export class PackageJSONContribution implements IJSONContribution {
if
((
location
.
matches
([
'
dependencies
'
,
'
*
'
])
||
location
.
matches
([
'
devDependencies
'
,
'
*
'
])
||
location
.
matches
([
'
optionalDependencies
'
,
'
*
'
])
||
location
.
matches
([
'
peerDependencies
'
,
'
*
'
])))
{
const
currentKey
=
location
.
path
[
location
.
path
.
length
-
1
];
if
(
typeof
currentKey
===
'
string
'
)
{
const
queryUrl
=
'
https://registry.npmjs.org/
'
+
encodeURIComponent
(
currentKey
).
replace
(
/%40/g
,
'
@
'
);
return
this
.
xhr
({
url
:
queryUrl
,
agent
:
USER_AGENT
}).
then
((
success
)
=>
{
try
{
const
obj
=
JSON
.
parse
(
success
.
responseText
);
const
latest
=
obj
&&
obj
[
'
dist-tags
'
]
&&
obj
[
'
dist-tags
'
][
'
latest
'
];
if
(
latest
)
{
let
name
=
JSON
.
stringify
(
latest
);
let
proposal
=
new
CompletionItem
(
name
);
proposal
.
kind
=
CompletionItemKind
.
Property
;
proposal
.
insertText
=
name
;
proposal
.
documentation
=
localize
(
'
json.npm.latestversion
'
,
'
The currently latest version of the package
'
);
result
.
add
(
proposal
);
return
this
.
npmView
(
currentKey
).
then
(
info
=>
{
const
latest
=
info
.
distTagsLatest
;
if
(
latest
)
{
let
name
=
JSON
.
stringify
(
latest
);
let
proposal
=
new
CompletionItem
(
name
);
proposal
.
kind
=
CompletionItemKind
.
Property
;
proposal
.
insertText
=
name
;
proposal
.
documentation
=
localize
(
'
json.npm.latestversion
'
,
'
The currently latest version of the package
'
);
result
.
add
(
proposal
);
name
=
JSON
.
stringify
(
'
^
'
+
latest
);
proposal
=
new
CompletionItem
(
name
);
proposal
.
kind
=
CompletionItemKind
.
Property
;
proposal
.
insertText
=
name
;
proposal
.
documentation
=
localize
(
'
json.npm.majorversion
'
,
'
Matches the most recent major version (1.x.x)
'
);
result
.
add
(
proposal
);
name
=
JSON
.
stringify
(
'
^
'
+
latest
);
proposal
=
new
CompletionItem
(
name
);
proposal
.
kind
=
CompletionItemKind
.
Property
;
proposal
.
insertText
=
name
;
proposal
.
documentation
=
localize
(
'
json.npm.majorversion
'
,
'
Matches the most recent major version (1.x.x)
'
);
result
.
add
(
proposal
);
name
=
JSON
.
stringify
(
'
~
'
+
latest
);
proposal
=
new
CompletionItem
(
name
);
proposal
.
kind
=
CompletionItemKind
.
Property
;
proposal
.
insertText
=
name
;
proposal
.
documentation
=
localize
(
'
json.npm.minorversion
'
,
'
Matches the most recent minor version (1.2.x)
'
);
result
.
add
(
proposal
);
}
}
catch
(
e
)
{
// ignore
name
=
JSON
.
stringify
(
'
~
'
+
latest
);
proposal
=
new
CompletionItem
(
name
);
proposal
.
kind
=
CompletionItemKind
.
Property
;
proposal
.
insertText
=
name
;
proposal
.
documentation
=
localize
(
'
json.npm.minorversion
'
,
'
Matches the most recent minor version (1.2.x)
'
);
result
.
add
(
proposal
);
}
return
0
;
},
()
=>
{
...
...
@@ -288,37 +280,34 @@ export class PackageJSONContribution implements IJSONContribution {
}
private
getInfo
(
pack
:
string
):
Thenable
<
string
[]
>
{
const
queryUrl
=
'
https://registry.npmjs.org/
'
+
encodeURIComponent
(
pack
).
replace
(
/%40/g
,
'
@
'
);
return
this
.
xhr
({
url
:
queryUrl
,
agent
:
USER_AGENT
}).
then
((
success
)
=>
{
try
{
const
obj
=
JSON
.
parse
(
success
.
responseText
);
if
(
obj
)
{
const
result
:
string
[]
=
[];
if
(
obj
.
description
)
{
result
.
push
(
obj
.
description
);
}
const
latest
=
obj
&&
obj
[
'
dist-tags
'
]
&&
obj
[
'
dist-tags
'
][
'
latest
'
];
if
(
latest
)
{
result
.
push
(
localize
(
'
json.npm.version.hover
'
,
'
Latest version: {0}
'
,
latest
));
}
if
(
obj
.
homepage
)
{
result
.
push
(
obj
.
homepage
);
}
return
result
;
}
}
catch
(
e
)
{
// ignore
}
return
[];
return
this
.
npmView
(
pack
).
then
(
info
=>
{
const
result
:
string
[]
=
[];
result
.
push
(
info
.
description
||
''
);
result
.
push
(
info
.
distTagsLatest
?
localize
(
'
json.npm.version.hover
'
,
'
Latest version: {0}
'
,
info
.
distTagsLatest
)
:
''
);
result
.
push
(
info
.
homepage
||
''
);
return
result
;
},
()
=>
{
return
[];
});
}
private
npmView
(
pack
:
string
):
Promise
<
PackageInfo
>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
const
command
=
'
npm view --json
'
+
pack
+
'
description dist-tags.latest homepage
'
;
cp
.
exec
(
command
,
(
error
,
stdout
)
=>
{
if
(
error
)
{
return
reject
();
}
const
content
=
JSON
.
parse
(
stdout
);
resolve
({
description
:
content
[
'
description
'
],
distTagsLatest
:
content
[
'
dist-tags.latest
'
],
homepage
:
content
[
'
homepage
'
]
});
});
});
}
public
getInfoContribution
(
_fileName
:
string
,
location
:
Location
):
Thenable
<
MarkedString
[]
|
null
>
|
null
{
if
((
location
.
matches
([
'
dependencies
'
,
'
*
'
])
||
location
.
matches
([
'
devDependencies
'
,
'
*
'
])
||
location
.
matches
([
'
optionalDependencies
'
,
'
*
'
])
||
location
.
matches
([
'
peerDependencies
'
,
'
*
'
])))
{
const
pack
=
location
.
path
[
location
.
path
.
length
-
1
];
...
...
@@ -334,3 +323,9 @@ export class PackageJSONContribution implements IJSONContribution {
return
null
;
}
}
interface
PackageInfo
{
description
:
string
;
distTagsLatest
?:
string
;
homepage
?:
string
;
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录