Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
f80971cb
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,发现更多精彩内容 >>
未验证
提交
f80971cb
编写于
12月 10, 2018
作者:
J
Johannes Rieken
提交者:
GitHub
12月 10, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #64717 from Microsoft/joh/fixmem
Better Suggest Memories
上级
0baabc8a
8f36acde
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
56 addition
and
26 deletion
+56
-26
src/vs/editor/common/config/editorOptions.ts
src/vs/editor/common/config/editorOptions.ts
+2
-2
src/vs/editor/contrib/suggest/suggestController.ts
src/vs/editor/contrib/suggest/suggestController.ts
+5
-10
src/vs/editor/contrib/suggest/suggestMemory.ts
src/vs/editor/contrib/suggest/suggestMemory.ts
+48
-13
src/vs/monaco.d.ts
src/vs/monaco.d.ts
+1
-1
未找到文件。
src/vs/editor/common/config/editorOptions.ts
浏览文件 @
f80971cb
...
...
@@ -198,7 +198,7 @@ export interface ISuggestOptions {
/**
* Enable using global storage for remembering suggestions.
*/
useGlobalStorageForSugges
tions
?:
boolean
;
shareSuggestSelec
tions
?:
boolean
;
}
/**
...
...
@@ -1884,7 +1884,7 @@ export class EditorOptionsValidator {
snippets
:
_stringSet
<
'
top
'
|
'
bottom
'
|
'
inline
'
|
'
none
'
>
(
opts
.
snippetSuggestions
,
defaults
.
snippets
,
[
'
top
'
,
'
bottom
'
,
'
inline
'
,
'
none
'
]),
snippetsPreventQuickSuggestions
:
_boolean
(
suggestOpts
.
snippetsPreventQuickSuggestions
,
defaults
.
filterGraceful
),
localityBonus
:
_boolean
(
suggestOpts
.
localityBonus
,
defaults
.
localityBonus
),
shareSuggestSelections
:
_boolean
(
suggestOpts
.
useGlobalStorageForSugges
tions
,
defaults
.
shareSuggestSelections
)
shareSuggestSelections
:
_boolean
(
suggestOpts
.
shareSuggestSelec
tions
,
defaults
.
shareSuggestSelections
)
};
}
...
...
src/vs/editor/contrib/suggest/suggestController.ts
浏览文件 @
f80971cb
...
...
@@ -17,7 +17,7 @@ import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import
{
CompletionItemProvider
,
CompletionItemInsertTextRule
}
from
'
vs/editor/common/modes
'
;
import
{
SnippetController2
}
from
'
vs/editor/contrib/snippet/snippetController2
'
;
import
{
SnippetParser
}
from
'
vs/editor/contrib/snippet/snippetParser
'
;
import
{
SuggestMemories
}
from
'
vs/editor/contrib/suggest/suggestMemory
'
;
import
{
ISuggestMemoryService
}
from
'
vs/editor/contrib/suggest/suggestMemory
'
;
import
*
as
nls
from
'
vs/nls
'
;
import
{
ICommandService
}
from
'
vs/platform/commands/common/commands
'
;
import
{
ContextKeyExpr
,
IContextKeyService
}
from
'
vs/platform/contextkey/common/contextkey
'
;
...
...
@@ -89,7 +89,6 @@ export class SuggestController implements IEditorContribution {
private
_model
:
SuggestModel
;
private
_widget
:
SuggestWidget
;
private
readonly
_memory
:
IdleValue
<
SuggestMemories
>
;
private
readonly
_alternatives
:
IdleValue
<
SuggestAlternatives
>
;
private
_toDispose
:
IDisposable
[]
=
[];
...
...
@@ -98,16 +97,12 @@ export class SuggestController implements IEditorContribution {
constructor
(
private
_editor
:
ICodeEditor
,
@
IEditorWorkerService
editorWorker
:
IEditorWorkerService
,
@
ISuggestMemoryService
private
readonly
_memoryService
:
ISuggestMemoryService
,
@
ICommandService
private
readonly
_commandService
:
ICommandService
,
@
IContextKeyService
private
readonly
_contextKeyService
:
IContextKeyService
,
@
IInstantiationService
private
readonly
_instantiationService
:
IInstantiationService
,
)
{
this
.
_model
=
new
SuggestModel
(
this
.
_editor
,
editorWorker
);
this
.
_memory
=
new
IdleValue
(()
=>
{
let
res
=
_instantiationService
.
createInstance
(
SuggestMemories
,
this
.
_editor
);
this
.
_toDispose
.
push
(
res
);
return
res
;
});
this
.
_alternatives
=
new
IdleValue
(()
=>
{
let
res
=
new
SuggestAlternatives
(
this
.
_editor
,
this
.
_contextKeyService
);
...
...
@@ -125,7 +120,7 @@ export class SuggestController implements IEditorContribution {
}));
this
.
_toDispose
.
push
(
this
.
_model
.
onDidSuggest
(
e
=>
{
if
(
!
e
.
shy
)
{
let
index
=
this
.
_memory
.
getValue
()
.
select
(
this
.
_editor
.
getModel
(),
this
.
_editor
.
getPosition
(),
e
.
completionModel
.
items
);
let
index
=
this
.
_memory
Service
.
select
(
this
.
_editor
.
getModel
(),
this
.
_editor
.
getPosition
(),
e
.
completionModel
.
items
);
this
.
_widget
.
showSuggestions
(
e
.
completionModel
,
index
,
e
.
isFrozen
,
e
.
auto
);
}
}));
...
...
@@ -236,7 +231,7 @@ export class SuggestController implements IEditorContribution {
}
// keep item in memory
this
.
_memory
.
getValue
()
.
memorize
(
model
,
this
.
_editor
.
getPosition
(),
event
.
item
);
this
.
_memory
Service
.
memorize
(
model
,
this
.
_editor
.
getPosition
(),
event
.
item
);
let
{
insertText
}
=
suggestion
;
if
(
!
(
suggestion
.
insertTextRules
&
CompletionItemInsertTextRule
.
InsertAsSnippet
))
{
...
...
@@ -349,7 +344,7 @@ export class SuggestController implements IEditorContribution {
fallback
();
return
;
}
const
index
=
this
.
_memory
.
getValue
()
.
select
(
this
.
_editor
.
getModel
(),
this
.
_editor
.
getPosition
(),
completionModel
.
items
);
const
index
=
this
.
_memory
Service
.
select
(
this
.
_editor
.
getModel
(),
this
.
_editor
.
getPosition
(),
completionModel
.
items
);
const
item
=
completionModel
.
items
[
index
];
if
(
!
makesTextEdit
(
item
))
{
fallback
();
...
...
src/vs/editor/contrib/suggest/suggestMemory.ts
浏览文件 @
f80971cb
...
...
@@ -9,9 +9,11 @@ import { IStorageService, StorageScope } from 'vs/platform/storage/common/storag
import
{
ITextModel
}
from
'
vs/editor/common/model
'
;
import
{
IPosition
}
from
'
vs/editor/common/core/position
'
;
import
{
CompletionItemKind
,
completionKindFromLegacyString
}
from
'
vs/editor/common/modes
'
;
import
{
ICodeEditor
}
from
'
vs/editor/browser/editorBrowser
'
;
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
RunOnceScheduler
}
from
'
vs/base/common/async
'
;
import
{
createDecorator
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IConfigurationService
}
from
'
vs/platform/configuration/common/configuration
'
;
import
{
registerSingleton
}
from
'
vs/platform/instantiation/common/extensions
'
;
export
abstract
class
Memory
{
...
...
@@ -194,35 +196,56 @@ export class PrefixMemory extends Memory {
export
type
MemMode
=
'
first
'
|
'
recentlyUsed
'
|
'
recentlyUsedByPrefix
'
;
export
class
SuggestMemories
extends
Disposable
{
class
SuggestMemoryService
extends
Disposable
implements
ISuggestMemoryService
{
readonly
_serviceBrand
:
any
;
private
readonly
_storagePrefix
=
'
suggest/memories
'
;
private
readonly
_persistSoon
:
RunOnceScheduler
;
private
_mode
:
MemMode
;
private
_shareMem
:
boolean
;
private
_strategy
:
Memory
;
private
readonly
_persistSoon
:
RunOnceScheduler
;
constructor
(
editor
:
ICodeEditor
,
@
IStorageService
private
readonly
_storageService
:
IStorageService
,
@
IConfigurationService
private
readonly
_configService
:
IConfigurationService
,
)
{
super
();
this
.
_persistSoon
=
this
.
_register
(
new
RunOnceScheduler
(()
=>
this
.
_saveState
(
editor
.
getConfiguration
().
contribInfo
.
suggest
.
shareSuggestSelections
),
3000
));
this
.
_setMode
(
editor
.
getConfiguration
().
contribInfo
.
suggestSelection
,
editor
.
getConfiguration
().
contribInfo
.
suggest
.
shareSuggestSelections
);
this
.
_register
(
editor
.
onDidChangeConfiguration
(
e
=>
e
.
contribInfo
&&
this
.
_setMode
(
editor
.
getConfiguration
().
contribInfo
.
suggestSelection
,
editor
.
getConfiguration
().
contribInfo
.
suggest
.
shareSuggestSelections
)));
this
.
_register
(
_storageService
.
onWillSaveState
(()
=>
this
.
_saveState
(
editor
.
getConfiguration
().
contribInfo
.
suggest
.
shareSuggestSelections
)));
const
update
=
()
=>
{
const
mode
=
this
.
_configService
.
getValue
<
MemMode
>
(
'
editor.suggestSelection
'
);
const
share
=
this
.
_configService
.
getValue
<
boolean
>
(
'
editor.suggest.shareSuggestSelections
'
);
this
.
_update
(
mode
,
share
);
};
this
.
_persistSoon
=
this
.
_register
(
new
RunOnceScheduler
(()
=>
this
.
_saveState
(),
3000
));
this
.
_register
(
_storageService
.
onWillSaveState
(()
=>
this
.
_saveState
()));
this
.
_register
(
this
.
_configService
.
onDidChangeConfiguration
(
e
=>
{
if
(
e
.
affectsConfiguration
(
'
editor.suggestSelection
'
)
||
e
.
affectsConfiguration
(
'
editor.suggest.shareSuggestSelections
'
))
{
update
();
}
}));
// this._register(this._storageService.onDidChangeStorage(e => {
// if (e.scope === StorageScope.GLOBAL && e.key.indexOf(this._storagePrefix) === 0) {
// update();
// }
// }));
update
();
}
private
_
setMode
(
mode
:
MemMode
,
useGlobalStorageForSuggestions
:
boolean
):
void
{
if
(
this
.
_mode
===
mode
)
{
private
_
update
(
mode
:
MemMode
,
shareMem
:
boolean
):
void
{
if
(
this
.
_mode
===
mode
&&
this
.
_shareMem
===
shareMem
)
{
return
;
}
this
.
_shareMem
=
shareMem
;
this
.
_mode
=
mode
;
this
.
_strategy
=
mode
===
'
recentlyUsedByPrefix
'
?
new
PrefixMemory
()
:
mode
===
'
recentlyUsed
'
?
new
LRUMemory
()
:
new
NoMemory
();
try
{
const
raw
=
useGlobalStorageForSuggestions
?
this
.
_storageService
.
get
(
`
${
this
.
_storagePrefix
}
/
${
this
.
_mode
}
`
,
StorageScope
.
GLOBAL
)
:
this
.
_storageService
.
get
(
`
${
this
.
_storagePrefix
}
/
${
this
.
_mode
}
`
,
StorageScope
.
WORKSPACE
);
const
scope
=
shareMem
?
StorageScope
.
GLOBAL
:
StorageScope
.
WORKSPACE
;
const
raw
=
this
.
_storageService
.
get
(
`
${
this
.
_storagePrefix
}
/
${
this
.
_mode
}
`
,
scope
);
if
(
raw
)
{
this
.
_strategy
.
fromJSON
(
JSON
.
parse
(
raw
));
}
...
...
@@ -240,8 +263,20 @@ export class SuggestMemories extends Disposable {
return
this
.
_strategy
.
select
(
model
,
pos
,
items
);
}
private
_saveState
(
useGlobalStorageForSuggestions
:
boolean
)
{
private
_saveState
()
{
const
raw
=
JSON
.
stringify
(
this
.
_strategy
);
this
.
_storageService
.
store
(
`
${
this
.
_storagePrefix
}
/
${
this
.
_mode
}
`
,
raw
,
useGlobalStorageForSuggestions
?
StorageScope
.
GLOBAL
:
StorageScope
.
WORKSPACE
);
const
scope
=
this
.
_shareMem
?
StorageScope
.
GLOBAL
:
StorageScope
.
WORKSPACE
;
this
.
_storageService
.
store
(
`
${
this
.
_storagePrefix
}
/
${
this
.
_mode
}
`
,
raw
,
scope
);
}
}
export
const
ISuggestMemoryService
=
createDecorator
<
ISuggestMemoryService
>
(
'
ISuggestMemories
'
);
export
interface
ISuggestMemoryService
{
_serviceBrand
:
any
;
memorize
(
model
:
ITextModel
,
pos
:
IPosition
,
item
:
ICompletionItem
):
void
;
select
(
model
:
ITextModel
,
pos
:
IPosition
,
items
:
ICompletionItem
[]):
number
;
}
registerSingleton
(
ISuggestMemoryService
,
SuggestMemoryService
,
true
);
src/vs/monaco.d.ts
浏览文件 @
f80971cb
...
...
@@ -2561,7 +2561,7 @@ declare namespace monaco.editor {
/**
* Enable using global storage for remembering suggestions.
*/
useGlobalStorageForSugges
tions
?:
boolean
;
shareSuggestSelec
tions
?:
boolean
;
}
/**
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录