Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
74b25109
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,发现更多精彩内容 >>
提交
74b25109
编写于
11月 10, 2020
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
word based completion includes words from other files of same language
上级
76abce66
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
40 addition
and
38 deletion
+40
-38
src/vs/editor/common/services/editorSimpleWorker.ts
src/vs/editor/common/services/editorSimpleWorker.ts
+16
-22
src/vs/editor/common/services/editorWorkerServiceImpl.ts
src/vs/editor/common/services/editorWorkerServiceImpl.ts
+23
-15
src/vs/editor/test/common/services/editorSimpleWorker.test.ts
...vs/editor/test/common/services/editorSimpleWorker.test.ts
+1
-1
未找到文件。
src/vs/editor/common/services/editorSimpleWorker.ts
浏览文件 @
74b25109
...
...
@@ -530,36 +530,30 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable {
private
static
readonly
_suggestionsLimit
=
10000
;
public
async
textualSuggest
(
modelUrl
:
string
,
position
:
IPosition
,
wordDef
:
string
,
wordDefFlags
:
string
):
Promise
<
{
words
:
string
[],
duration
:
number
}
|
null
>
{
const
model
=
this
.
_getModel
(
modelUrl
);
if
(
!
model
)
{
return
null
;
}
public
async
textualSuggest
(
modelUrls
:
string
[],
leadingWord
:
string
|
undefined
,
wordDef
:
string
,
wordDefFlags
:
string
):
Promise
<
{
words
:
string
[],
duration
:
number
}
|
null
>
{
const
sw
=
new
StopWatch
(
true
);
const
words
:
string
[]
=
[];
const
seen
=
new
Set
<
string
>
();
const
wordDefRegExp
=
new
RegExp
(
wordDef
,
wordDefFlags
);
const
seen
=
new
Set
<
string
>
();
const
wordAt
=
model
.
getWordAtPosition
(
position
,
wordDefRegExp
);
if
(
wordAt
)
{
seen
.
add
(
model
.
getValueInRange
(
wordAt
));
}
for
(
let
word
of
model
.
words
(
wordDefRegExp
))
{
if
(
seen
.
has
(
word
))
{
outer
:
for
(
let
url
of
modelUrls
)
{
const
model
=
this
.
_getModel
(
url
);
if
(
!
model
)
{
continue
;
}
seen
.
add
(
word
);
if
(
!
isNaN
(
Number
(
word
)))
{
continue
;
}
words
.
push
(
word
);
if
(
seen
.
size
>
EditorSimpleWorker
.
_suggestionsLimit
)
{
break
;
for
(
let
word
of
model
.
words
(
wordDefRegExp
))
{
if
(
word
===
leadingWord
||
!
isNaN
(
Number
(
word
)))
{
continue
;
}
seen
.
add
(
word
);
if
(
seen
.
size
>
EditorSimpleWorker
.
_suggestionsLimit
)
{
break
outer
;
}
}
}
return
{
words
,
duration
:
sw
.
elapsed
()
};
return
{
words
:
Array
.
from
(
seen
),
duration
:
sw
.
elapsed
()
};
}
...
...
src/vs/editor/common/services/editorWorkerServiceImpl.ts
浏览文件 @
74b25109
...
...
@@ -8,7 +8,7 @@ import { Disposable, IDisposable, dispose, toDisposable, DisposableStore } from
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
SimpleWorkerClient
,
logOnceWebWorkerWarning
,
IWorkerClient
}
from
'
vs/base/common/worker/simpleWorker
'
;
import
{
DefaultWorkerFactory
}
from
'
vs/base/worker/defaultWorkerFactory
'
;
import
{
IPosition
,
Position
}
from
'
vs/editor/common/core/position
'
;
import
{
Position
}
from
'
vs/editor/common/core/position
'
;
import
{
IRange
,
Range
}
from
'
vs/editor/common/core/range
'
;
import
{
IChange
}
from
'
vs/editor/common/editorCommon
'
;
import
{
ITextModel
}
from
'
vs/editor/common/model
'
;
...
...
@@ -152,16 +152,30 @@ class WordBasedCompletionItemProvider implements modes.CompletionItemProvider {
if
(
!
wordBasedSuggestions
)
{
return
undefined
;
}
if
(
!
canSyncModel
(
this
.
_modelService
,
model
.
uri
))
{
return
undefined
;
// File too large
const
models
:
URI
[]
=
[];
for
(
let
candidate
of
this
.
_modelService
.
getModels
())
{
if
(
!
canSyncModel
(
this
.
_modelService
,
candidate
.
uri
))
{
continue
;
}
if
(
candidate
===
model
)
{
models
.
unshift
(
candidate
.
uri
);
}
else
if
(
candidate
.
getLanguageIdentifier
().
id
===
model
.
getLanguageIdentifier
().
id
)
{
models
.
push
(
candidate
.
uri
);
}
}
if
(
models
.
length
===
0
)
{
return
undefined
;
// File too large, no other files
}
const
wordDefRegExp
=
LanguageConfigurationRegistry
.
getWordDefinition
(
model
.
getLanguageIdentifier
().
id
);
const
word
=
model
.
getWordAtPosition
(
position
);
const
replace
=
!
word
?
Range
.
fromPositions
(
position
)
:
new
Range
(
position
.
lineNumber
,
word
.
startColumn
,
position
.
lineNumber
,
word
.
endColumn
);
const
insert
=
replace
.
setEndPosition
(
position
.
lineNumber
,
position
.
column
);
const
client
=
await
this
.
_workerManager
.
withWorker
();
const
data
=
await
client
.
textualSuggest
(
model
.
uri
,
position
);
const
data
=
await
client
.
textualSuggest
(
model
s
,
word
?.
word
,
wordDefRegExp
);
if
(
!
data
)
{
return
undefined
;
}
...
...
@@ -463,17 +477,11 @@ export class EditorWorkerClient extends Disposable {
});
}
public
textualSuggest
(
resource
:
URI
,
position
:
IPosition
):
Promise
<
{
words
:
string
[],
duration
:
number
}
|
null
>
{
return
this
.
_withSyncedResources
([
resource
]).
then
(
proxy
=>
{
let
model
=
this
.
_modelService
.
getModel
(
resource
);
if
(
!
model
)
{
return
null
;
}
let
wordDefRegExp
=
LanguageConfigurationRegistry
.
getWordDefinition
(
model
.
getLanguageIdentifier
().
id
);
let
wordDef
=
wordDefRegExp
.
source
;
let
wordDefFlags
=
regExpFlags
(
wordDefRegExp
);
return
proxy
.
textualSuggest
(
resource
.
toString
(),
position
,
wordDef
,
wordDefFlags
);
});
public
async
textualSuggest
(
resources
:
URI
[],
leadingWord
:
string
|
undefined
,
wordDefRegExp
:
RegExp
):
Promise
<
{
words
:
string
[],
duration
:
number
}
|
null
>
{
const
proxy
=
await
this
.
_withSyncedResources
(
resources
);
const
wordDef
=
wordDefRegExp
.
source
;
const
wordDefFlags
=
regExpFlags
(
wordDefRegExp
);
return
proxy
.
textualSuggest
(
resources
.
map
(
r
=>
r
.
toString
()),
leadingWord
,
wordDef
,
wordDefFlags
);
}
computeWordRanges
(
resource
:
URI
,
range
:
IRange
):
Promise
<
{
[
word
:
string
]:
IRange
[]
}
|
null
>
{
...
...
src/vs/editor/test/common/services/editorSimpleWorker.test.ts
浏览文件 @
74b25109
...
...
@@ -162,7 +162,7 @@ suite('EditorSimpleWorker', () => {
'
f f
'
// 2
]);
return
worker
.
textualSuggest
(
model
.
uri
.
toString
(),
{
lineNumber
:
2
,
column
:
2
}
,
'
[a-z]+
'
,
'
img
'
).
then
((
result
)
=>
{
return
worker
.
textualSuggest
(
[
model
.
uri
.
toString
()],
'
f
'
,
'
[a-z]+
'
,
'
img
'
).
then
((
result
)
=>
{
if
(
!
result
)
{
assert
.
ok
(
false
);
return
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录