Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
6804f4d9
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,发现更多精彩内容 >>
提交
6804f4d9
编写于
3月 14, 2018
作者:
M
Martin Aeschlimann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[html] update dependencies, extract folding, folding tests
上级
a4c05af8
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
397 addition
and
152 deletion
+397
-152
extensions/html/package.json
extensions/html/package.json
+2
-2
extensions/html/server/package.json
extensions/html/server/package.json
+6
-6
extensions/html/server/src/htmlServerMain.ts
extensions/html/server/src/htmlServerMain.ts
+10
-12
extensions/html/server/src/modes/cssMode.ts
extensions/html/server/src/modes/cssMode.ts
+1
-1
extensions/html/server/src/modes/htmlFolding.ts
extensions/html/server/src/modes/htmlFolding.ts
+170
-0
extensions/html/server/src/modes/htmlMode.ts
extensions/html/server/src/modes/htmlMode.ts
+5
-74
extensions/html/server/src/modes/languageModes.ts
extensions/html/server/src/modes/languageModes.ts
+3
-5
extensions/html/server/src/modes/pathCompletion.ts
extensions/html/server/src/modes/pathCompletion.ts
+4
-4
extensions/html/server/src/test/completions.test.ts
extensions/html/server/src/test/completions.test.ts
+2
-2
extensions/html/server/src/test/folding.test.ts
extensions/html/server/src/test/folding.test.ts
+140
-0
extensions/html/server/src/utils/documentContext.ts
extensions/html/server/src/utils/documentContext.ts
+1
-1
extensions/html/server/yarn.lock
extensions/html/server/yarn.lock
+35
-27
extensions/html/yarn.lock
extensions/html/yarn.lock
+18
-18
未找到文件。
extensions/html/package.json
浏览文件 @
6804f4d9
...
...
@@ -235,8 +235,8 @@
},
"dependencies"
:
{
"vscode-extension-telemetry"
:
"0.0.15"
,
"vscode-languageclient"
:
"
4.0.0-next.9
"
,
"vscode-nls"
:
"^3.2.
1
"
"vscode-languageclient"
:
"
^4.0.0
"
,
"vscode-nls"
:
"^3.2.
2
"
},
"devDependencies"
:
{
"@types/node"
:
"7.0.43"
...
...
extensions/html/server/package.json
浏览文件 @
6804f4d9
...
...
@@ -8,13 +8,13 @@
"node"
:
"*"
},
"dependencies"
:
{
"vscode-css-languageservice"
:
"^3.0.
6
"
,
"vscode-css-languageservice"
:
"^3.0.
8
"
,
"vscode-emmet-helper"
:
"1.2.1"
,
"vscode-html-languageservice"
:
"^2.
0.17-next.3
"
,
"vscode-languageserver"
:
"
4.0.0-next.4
"
,
"vscode-languageserver-types"
:
"^3.6.
0-next.
1"
,
"vscode-nls"
:
"^3.2.
1
"
,
"vscode-uri"
:
"^1.0.
1
"
"vscode-html-languageservice"
:
"^2.
1.1
"
,
"vscode-languageserver"
:
"
^4.0.0
"
,
"vscode-languageserver-types"
:
"^3.6.1"
,
"vscode-nls"
:
"^3.2.
2
"
,
"vscode-uri"
:
"^1.0.
3
"
},
"devDependencies"
:
{
"@types/mocha"
:
"2.2.33"
,
...
...
extensions/html/server/src/htmlServerMain.ts
浏览文件 @
6804f4d9
...
...
@@ -4,14 +4,15 @@
*--------------------------------------------------------------------------------------------*/
'
use strict
'
;
import
{
createConnection
,
IConnection
,
TextDocuments
,
InitializeParams
,
InitializeResult
,
RequestType
,
DocumentRangeFormattingRequest
,
Disposable
,
DocumentSelector
,
TextDocumentPositionParams
,
ServerCapabilities
,
Position
,
CompletionTriggerKind
}
from
'
vscode-languageserver
'
;
import
{
createConnection
,
IConnection
,
TextDocuments
,
InitializeParams
,
InitializeResult
,
RequestType
,
DocumentRangeFormattingRequest
,
Disposable
,
DocumentSelector
,
TextDocumentPositionParams
,
ServerCapabilities
,
Position
,
CompletionTriggerKind
,
ConfigurationRequest
,
ConfigurationParams
,
DidChangeWorkspaceFoldersNotification
,
WorkspaceFolder
,
DocumentColorRequest
,
ColorInformation
,
ColorPresentationRequest
}
from
'
vscode-languageserver
'
;
import
{
TextDocument
,
Diagnostic
,
DocumentLink
,
SymbolInformation
,
CompletionList
}
from
'
vscode-languageserver-types
'
;
import
{
getLanguageModes
,
LanguageModes
,
Settings
}
from
'
./modes/languageModes
'
;
import
{
ConfigurationRequest
,
ConfigurationParams
}
from
'
vscode-languageserver-protocol/lib/protocol.configuration.proposed
'
;
import
{
DocumentColorRequest
,
ServerCapabilities
as
CPServerCapabilities
,
ColorInformation
,
ColorPresentationRequest
}
from
'
vscode-languageserver-protocol/lib/protocol.colorProvider.proposed
'
;
import
{
DidChangeWorkspaceFoldersNotification
,
WorkspaceFolder
}
from
'
vscode-languageserver-protocol/lib/protocol.workspaceFolders.proposed
'
;
import
{
format
}
from
'
./modes/formatting
'
;
import
{
pushAll
}
from
'
./utils/arrays
'
;
import
{
getDocumentContext
}
from
'
./utils/documentContext
'
;
...
...
@@ -21,6 +22,7 @@ import { doComplete as emmetDoComplete, updateExtensionsPath as updateEmmetExten
import
{
getPathCompletionParticipant
}
from
'
./modes/pathCompletion
'
;
import
{
FoldingRangesRequest
,
FoldingProviderServerCapabilities
}
from
'
./protocol/foldingProvider.proposed
'
;
import
{
getFoldingRegions
}
from
'
./modes/htmlFolding
'
;
namespace
TagCloseRequest
{
export
const
type
:
RequestType
<
TextDocumentPositionParams
,
string
|
null
,
any
,
any
>
=
new
RequestType
(
'
html/tag
'
);
...
...
@@ -113,7 +115,7 @@ connection.onInitialize((params: InitializeParams): InitializeResult => {
clientDynamicRegisterSupport
=
hasClientCapability
(
'
workspace
'
,
'
symbol
'
,
'
dynamicRegistration
'
);
scopedSettingsSupport
=
hasClientCapability
(
'
workspace
'
,
'
configuration
'
);
workspaceFoldersSupport
=
hasClientCapability
(
'
workspace
'
,
'
workspaceFolders
'
);
let
capabilities
:
ServerCapabilities
&
CPServerCapabilities
&
FoldingProviderServerCapabilities
=
{
let
capabilities
:
ServerCapabilities
&
FoldingProviderServerCapabilities
=
{
// Tell the client that the server works in FULL text document sync mode
textDocumentSync
:
documents
.
syncKind
,
completionProvider
:
clientSnippetSupport
?
{
resolveProvider
:
true
,
triggerCharacters
:
[...
emmetTriggerCharacters
,
'
.
'
,
'
:
'
,
'
<
'
,
'
"
'
,
'
=
'
,
'
/
'
]
}
:
undefined
,
...
...
@@ -469,15 +471,11 @@ connection.onRequest(TagCloseRequest.type, params => {
},
null
,
`Error while computing tag close actions for
${
params
.
textDocument
.
uri
}
`
);
});
connection
.
onRequest
(
FoldingRangesRequest
.
type
,
params
=>
{
connection
.
onRequest
(
FoldingRangesRequest
.
type
,
(
params
,
token
)
=>
{
return
runSafe
(()
=>
{
let
document
=
documents
.
get
(
params
.
textDocument
.
uri
);
if
(
document
)
{
let
mode
=
languageModes
.
getMode
(
'
html
'
);
if
(
mode
&&
mode
.
getFoldingRanges
)
{
return
mode
.
getFoldingRanges
(
document
);
}
return
null
;
return
getFoldingRegions
(
languageModes
,
document
,
params
.
maxRanges
,
token
);
}
return
null
;
},
null
,
`Error while computing folding regions for
${
params
.
textDocument
.
uri
}
`
);
...
...
extensions/html/server/src/modes/cssMode.ts
浏览文件 @
6804f4d9
...
...
@@ -9,7 +9,7 @@ import { TextDocument, Position, Range } from 'vscode-languageserver-types';
import
{
getCSSLanguageService
,
Stylesheet
,
ICompletionParticipant
}
from
'
vscode-css-languageservice
'
;
import
{
LanguageMode
,
Settings
}
from
'
./languageModes
'
;
import
{
HTMLDocumentRegions
,
CSS_STYLE_RULE
}
from
'
./embeddedSupport
'
;
import
{
Color
}
from
'
vscode-languageserver
-protocol/lib/protocol.colorProvider.proposed
'
;
import
{
Color
}
from
'
vscode-languageserver
'
;
import
{
extractAbbreviation
}
from
'
vscode-emmet-helper
'
;
export
function
getCSSMode
(
documentRegions
:
LanguageModelCache
<
HTMLDocumentRegions
>
):
LanguageMode
{
...
...
extensions/html/server/src/modes/htmlFolding.ts
0 → 100644
浏览文件 @
6804f4d9
/*---------------------------------------------------------------------------------------------
* 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
,
CancellationToken
,
Position
}
from
'
vscode-languageserver
'
;
import
{
LanguageService
as
HTMLLanguageService
,
TokenType
,
Range
}
from
'
vscode-html-languageservice
'
;
import
{
FoldingRangeType
,
FoldingRange
,
FoldingRangeList
}
from
'
../protocol/foldingProvider.proposed
'
;
import
{
LanguageModes
}
from
'
./languageModes
'
;
export
function
getFoldingRegions
(
languageModes
:
LanguageModes
,
document
:
TextDocument
,
maxRanges
:
number
|
undefined
,
cancellationToken
:
CancellationToken
|
null
):
FoldingRangeList
{
let
htmlMode
=
languageModes
.
getMode
(
'
html
'
);
let
range
=
Range
.
create
(
Position
.
create
(
0
,
0
),
Position
.
create
(
document
.
lineCount
,
0
));
let
ranges
:
FoldingRange
[]
=
[];
if
(
htmlMode
&&
htmlMode
.
getFoldingRanges
)
{
ranges
.
push
(...
htmlMode
.
getFoldingRanges
(
document
,
range
));
}
let
modeRanges
=
languageModes
.
getModesInRange
(
document
,
range
);
for
(
let
modeRange
of
modeRanges
)
{
let
mode
=
modeRange
.
mode
;
if
(
mode
&&
mode
!==
htmlMode
&&
mode
.
getFoldingRanges
&&
!
modeRange
.
attributeValue
)
{
ranges
.
push
(...
mode
.
getFoldingRanges
(
document
,
modeRange
));
}
}
if
(
maxRanges
&&
ranges
.
length
>
maxRanges
)
{
ranges
=
limitRanges
(
ranges
,
maxRanges
);
}
return
{
ranges
};
}
function
limitRanges
(
ranges
:
FoldingRange
[],
maxRanges
:
number
)
{
ranges
=
ranges
.
sort
((
r1
,
r2
)
=>
{
let
diff
=
r1
.
startLine
-
r2
.
startLine
;
if
(
diff
===
0
)
{
diff
=
r1
.
endLine
-
r2
.
endLine
;
}
return
diff
;
});
// compute each range's nesting level in 'nestingLevels'.
// count the number of ranges for each level in 'nestingLevelCounts'
let
top
:
FoldingRange
|
null
=
null
;
let
previous
:
FoldingRange
[]
=
[];
let
nestingLevels
:
number
[]
=
[];
let
nestingLevelCounts
:
number
[]
=
[];
let
setNestingLevel
=
(
level
:
number
)
=>
{
nestingLevels
.
push
(
level
);
if
(
level
<
30
)
{
nestingLevelCounts
[
level
]
=
(
nestingLevelCounts
[
level
]
||
0
)
+
1
;
}
};
for
(
let
i
=
0
;
i
<
ranges
.
length
;
i
++
)
{
let
entry
=
ranges
[
i
];
if
(
!
top
)
{
top
=
entry
;
setNestingLevel
(
0
);
}
else
{
if
(
entry
.
startLine
>
top
.
startLine
)
{
if
(
entry
.
endLine
<=
top
.
endLine
)
{
previous
.
push
(
top
);
top
=
entry
;
setNestingLevel
(
previous
.
length
);
}
else
if
(
entry
.
startLine
>
top
.
startLine
)
{
do
{
top
=
previous
.
pop
();
}
while
(
top
&&
entry
.
startLine
>
top
.
endLine
);
previous
.
push
(
top
);
top
=
entry
;
setNestingLevel
(
previous
.
length
);
}
}
}
}
let
entries
=
0
;
let
maxLevel
=
0
;
for
(
let
i
=
0
;
i
<
nestingLevels
.
length
;
i
++
)
{
let
n
=
nestingLevels
[
i
];
if
(
n
)
{
if
(
n
+
entries
>
maxRanges
)
{
maxLevel
=
i
;
break
;
}
entries
+=
n
;
}
}
return
ranges
.
filter
((
r
,
index
)
=>
(
typeof
nestingLevels
[
index
]
===
'
number
'
)
&&
nestingLevels
[
index
]
<
maxLevel
);
}
export
function
getHTMLFoldingRegions
(
htmlLanguageService
:
HTMLLanguageService
,
document
:
TextDocument
,
range
:
Range
):
FoldingRange
[]
{
const
scanner
=
htmlLanguageService
.
createScanner
(
document
.
getText
());
let
token
=
scanner
.
scan
();
let
ranges
:
FoldingRange
[]
=
[];
let
stack
:
FoldingRange
[]
=
[];
let
elementNames
:
string
[]
=
[];
let
lastTagName
=
null
;
let
prevStart
=
-
1
;
function
addRange
(
range
:
FoldingRange
)
{
ranges
.
push
(
range
);
}
while
(
token
!==
TokenType
.
EOS
)
{
switch
(
token
)
{
case
TokenType
.
StartTagOpen
:
{
let
startLine
=
document
.
positionAt
(
scanner
.
getTokenOffset
()).
line
;
let
range
=
{
startLine
,
endLine
:
startLine
};
stack
.
push
(
range
);
break
;
}
case
TokenType
.
StartTag
:
{
lastTagName
=
scanner
.
getTokenText
();
elementNames
.
push
(
lastTagName
);
break
;
}
case
TokenType
.
EndTag
:
{
lastTagName
=
scanner
.
getTokenText
();
break
;
}
case
TokenType
.
EndTagClose
:
case
TokenType
.
StartTagSelfClose
:
{
let
name
=
elementNames
.
pop
();
let
range
=
stack
.
pop
();
while
(
name
&&
name
!==
lastTagName
)
{
name
=
elementNames
.
pop
();
range
=
stack
.
pop
();
}
let
line
=
document
.
positionAt
(
scanner
.
getTokenOffset
()).
line
;
if
(
range
&&
line
>
range
.
startLine
+
1
&&
prevStart
!==
range
.
startLine
)
{
range
.
endLine
=
line
-
1
;
addRange
(
range
);
prevStart
=
range
.
startLine
;
}
break
;
}
case
TokenType
.
Comment
:
{
let
text
=
scanner
.
getTokenText
();
let
m
=
text
.
match
(
/^
\s
*#
(
region
\b)
|
(
endregion
\b)
/
);
if
(
m
)
{
let
line
=
document
.
positionAt
(
scanner
.
getTokenOffset
()).
line
;
if
(
m
[
1
])
{
// start pattern match
let
range
=
{
startLine
:
line
,
endLine
:
line
,
type
:
FoldingRangeType
.
Region
};
stack
.
push
(
range
);
elementNames
.
push
(
''
);
}
else
{
let
i
=
stack
.
length
-
1
;
while
(
i
>=
0
&&
stack
[
i
].
type
!==
FoldingRangeType
.
Region
)
{
i
--
;
}
if
(
i
>=
0
)
{
let
range
=
stack
[
i
];
stack
.
length
=
i
;
if
(
line
>
range
.
startLine
&&
prevStart
!==
range
.
startLine
)
{
range
.
endLine
=
line
;
addRange
(
range
);
prevStart
=
range
.
startLine
;
}
}
}
}
break
;
}
}
token
=
scanner
.
scan
();
}
return
ranges
;
}
\ No newline at end of file
extensions/html/server/src/modes/htmlMode.ts
浏览文件 @
6804f4d9
...
...
@@ -5,11 +5,12 @@
'
use strict
'
;
import
{
getLanguageModelCache
}
from
'
../languageModelCache
'
;
import
{
LanguageService
as
HTMLLanguageService
,
HTMLDocument
,
DocumentContext
,
FormattingOptions
,
HTMLFormatConfiguration
,
TokenType
}
from
'
vscode-html-languageservice
'
;
import
{
LanguageService
as
HTMLLanguageService
,
HTMLDocument
,
DocumentContext
,
FormattingOptions
,
HTMLFormatConfiguration
}
from
'
vscode-html-languageservice
'
;
import
{
TextDocument
,
Position
,
Range
}
from
'
vscode-languageserver-types
'
;
import
{
LanguageMode
,
Settings
}
from
'
./languageModes
'
;
import
{
FoldingRangeType
,
FoldingRange
,
FoldingRangeList
}
from
'
../protocol/foldingProvider.proposed
'
;
import
{
FoldingRange
}
from
'
../protocol/foldingProvider.proposed
'
;
import
{
getHTMLFoldingRegions
}
from
'
./htmlFolding
'
;
export
function
getHTMLMode
(
htmlLanguageService
:
HTMLLanguageService
):
LanguageMode
{
let
globalSettings
:
Settings
=
{};
...
...
@@ -67,78 +68,8 @@ export function getHTMLMode(htmlLanguageService: HTMLLanguageService): LanguageM
formatSettings
=
merge
(
formatParams
,
formatSettings
);
return
htmlLanguageService
.
format
(
document
,
range
,
formatSettings
);
},
getFoldingRanges
(
document
:
TextDocument
):
FoldingRangeList
{
const
scanner
=
htmlLanguageService
.
createScanner
(
document
.
getText
());
let
token
=
scanner
.
scan
();
let
ranges
:
FoldingRange
[]
=
[];
let
stack
:
FoldingRange
[]
=
[];
let
elementNames
:
string
[]
=
[];
let
lastTagName
=
null
;
let
prevStart
=
-
1
;
while
(
token
!==
TokenType
.
EOS
)
{
switch
(
token
)
{
case
TokenType
.
StartTagOpen
:
{
let
startLine
=
document
.
positionAt
(
scanner
.
getTokenOffset
()).
line
;
let
range
=
{
startLine
,
endLine
:
startLine
};
stack
.
push
(
range
);
break
;
}
case
TokenType
.
StartTag
:
{
lastTagName
=
scanner
.
getTokenText
();
elementNames
.
push
(
lastTagName
);
break
;
}
case
TokenType
.
EndTag
:
{
lastTagName
=
scanner
.
getTokenText
();
break
;
}
case
TokenType
.
EndTagClose
:
case
TokenType
.
StartTagSelfClose
:
{
let
name
=
elementNames
.
pop
();
let
range
=
stack
.
pop
();
while
(
name
&&
name
!==
lastTagName
)
{
name
=
elementNames
.
pop
();
range
=
stack
.
pop
();
}
let
line
=
document
.
positionAt
(
scanner
.
getTokenOffset
()).
line
;
if
(
range
&&
line
>
range
.
startLine
+
1
&&
prevStart
!==
range
.
startLine
)
{
range
.
endLine
=
line
-
1
;
ranges
.
push
(
range
);
prevStart
=
range
.
startLine
;
}
break
;
}
case
TokenType
.
Comment
:
{
let
text
=
scanner
.
getTokenText
();
let
m
=
text
.
match
(
/^
\s
*#
(
region
\b)
|
(
endregion
\b)
/
);
if
(
m
)
{
let
line
=
document
.
positionAt
(
scanner
.
getTokenOffset
()).
line
;
if
(
m
[
1
])
{
// start pattern match
let
range
=
{
startLine
:
line
,
endLine
:
line
,
type
:
FoldingRangeType
.
Region
};
stack
.
push
(
range
);
elementNames
.
push
(
''
);
}
else
{
let
i
=
stack
.
length
-
1
;
while
(
i
>=
0
&&
stack
[
i
].
type
!==
FoldingRangeType
.
Region
)
{
i
--
;
}
if
(
i
>=
0
)
{
let
range
=
stack
[
i
];
stack
.
length
=
i
;
if
(
line
>
range
.
startLine
&&
prevStart
!==
range
.
startLine
)
{
range
.
endLine
=
line
;
ranges
.
push
(
range
);
prevStart
=
range
.
startLine
;
}
}
}
}
break
;
}
}
token
=
scanner
.
scan
();
}
return
<
FoldingRangeList
>
{
ranges
};
getFoldingRanges
(
document
:
TextDocument
,
range
:
Range
):
FoldingRange
[]
{
return
getHTMLFoldingRegions
(
htmlLanguageService
,
document
,
range
);
},
doAutoClose
(
document
:
TextDocument
,
position
:
Position
)
{
...
...
extensions/html/server/src/modes/languageModes.ts
浏览文件 @
6804f4d9
...
...
@@ -9,8 +9,8 @@ import {
CompletionItem
,
Location
,
SignatureHelp
,
Definition
,
TextEdit
,
TextDocument
,
Diagnostic
,
DocumentLink
,
Range
,
Hover
,
DocumentHighlight
,
CompletionList
,
Position
,
FormattingOptions
,
SymbolInformation
}
from
'
vscode-languageserver-types
'
;
import
{
ColorInformation
,
ColorPresentation
,
Color
}
from
'
vscode-languageserver-protocol/lib/protocol.color
Provider.proposed
'
;
import
{
ColorInformation
,
ColorPresentation
,
Color
}
from
'
vscode-languageserver
'
;
import
{
FoldingRange
}
from
'
../protocol/folding
Provider.proposed
'
;
import
{
getLanguageModelCache
,
LanguageModelCache
}
from
'
../languageModelCache
'
;
import
{
getDocumentRegions
,
HTMLDocumentRegions
}
from
'
./embeddedSupport
'
;
...
...
@@ -20,8 +20,6 @@ import { getHTMLMode } from './htmlMode';
export
{
ColorInformation
,
ColorPresentation
,
Color
};
import
{
FoldingRangeList
}
from
'
../protocol/foldingProvider.proposed
'
;
export
interface
Settings
{
css
?:
any
;
html
?:
any
;
...
...
@@ -51,7 +49,7 @@ export interface LanguageMode {
findDocumentColors
?:
(
document
:
TextDocument
)
=>
ColorInformation
[];
getColorPresentations
?:
(
document
:
TextDocument
,
color
:
Color
,
range
:
Range
)
=>
ColorPresentation
[];
doAutoClose
?:
(
document
:
TextDocument
,
position
:
Position
)
=>
string
|
null
;
getFoldingRanges
?:
(
document
:
TextDocument
)
=>
FoldingRangeList
|
null
;
getFoldingRanges
?:
(
document
:
TextDocument
,
range
:
Range
)
=>
FoldingRange
[]
;
onDocumentRemoved
(
document
:
TextDocument
):
void
;
dispose
():
void
;
}
...
...
extensions/html/server/src/modes/pathCompletion.ts
浏览文件 @
6804f4d9
...
...
@@ -5,17 +5,17 @@
'
use strict
'
;
import
{
TextDocument
,
CompletionList
,
CompletionItemKind
,
CompletionItem
,
TextEdit
,
Range
,
Position
}
from
'
vscode-languageserver-types
'
;
import
{
Proposed
}
from
'
vscode-languageserver-protocol
'
;
import
{
WorkspaceFolder
}
from
'
vscode-languageserver
'
;
import
*
as
path
from
'
path
'
;
import
*
as
fs
from
'
fs
'
;
import
URI
from
'
vscode-uri
'
;
import
{
ICompletionParticipant
}
from
'
vscode-html-languageservice
/lib/htmlLanguageService
'
;
import
{
ICompletionParticipant
}
from
'
vscode-html-languageservice
'
;
import
{
startsWith
}
from
'
../utils/strings
'
;
import
{
contains
}
from
'
../utils/arrays
'
;
export
function
getPathCompletionParticipant
(
document
:
TextDocument
,
workspaceFolders
:
Proposed
.
WorkspaceFolder
[]
|
undefined
,
workspaceFolders
:
WorkspaceFolder
[]
|
undefined
,
result
:
CompletionList
):
ICompletionParticipant
{
return
{
...
...
@@ -104,7 +104,7 @@ const isDir = (p: string) => {
return
fs
.
statSync
(
p
).
isDirectory
();
};
function
resolveWorkspaceRoot
(
activeDoc
:
TextDocument
,
workspaceFolders
:
Proposed
.
WorkspaceFolder
[]):
string
|
undefined
{
function
resolveWorkspaceRoot
(
activeDoc
:
TextDocument
,
workspaceFolders
:
WorkspaceFolder
[]):
string
|
undefined
{
for
(
let
i
=
0
;
i
<
workspaceFolders
.
length
;
i
++
)
{
if
(
startsWith
(
activeDoc
.
uri
,
workspaceFolders
[
i
].
uri
))
{
return
path
.
resolve
(
URI
.
parse
(
workspaceFolders
[
i
].
uri
).
fsPath
);
...
...
extensions/html/server/src/test/completions.test.ts
浏览文件 @
6804f4d9
...
...
@@ -12,7 +12,7 @@ import { TextDocument, CompletionList, CompletionItemKind, } from 'vscode-langua
import
{
getLanguageModes
}
from
'
../modes/languageModes
'
;
import
{
applyEdits
}
from
'
../utils/edits
'
;
import
{
getPathCompletionParticipant
}
from
'
../modes/pathCompletion
'
;
import
{
Proposed
}
from
'
vscode-languageserver-protocol
'
;
import
{
WorkspaceFolder
}
from
'
vscode-languageserver
'
;
export
interface
ItemDescription
{
label
:
string
;
...
...
@@ -49,7 +49,7 @@ suite('Completions', () => {
const
testUri
=
'
test://test/test.html
'
;
function
assertCompletions
(
value
:
string
,
expected
:
{
count
?:
number
,
items
?:
ItemDescription
[]
},
uri
=
testUri
,
workspaceFolders
?:
Proposed
.
WorkspaceFolder
[]):
void
{
function
assertCompletions
(
value
:
string
,
expected
:
{
count
?:
number
,
items
?:
ItemDescription
[]
},
uri
=
testUri
,
workspaceFolders
?:
WorkspaceFolder
[]):
void
{
let
offset
=
value
.
indexOf
(
'
|
'
);
value
=
value
.
substr
(
0
,
offset
)
+
value
.
substr
(
offset
+
1
);
...
...
extensions/html/server/src/test/folding.test.ts
0 → 100644
浏览文件 @
6804f4d9
/*---------------------------------------------------------------------------------------------
* 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
'
mocha
'
;
import
*
as
assert
from
'
assert
'
;
import
{
TextDocument
}
from
'
vscode-languageserver
'
;
import
{
getFoldingRegions
}
from
'
../modes/htmlFolding
'
;
import
{
getLanguageModes
}
from
'
../modes/languageModes
'
;
interface
ExpectedIndentRange
{
startLine
:
number
;
endLine
:
number
;
type
?:
string
;
}
function
assertRanges
(
lines
:
string
[],
expected
:
ExpectedIndentRange
[],
nRanges
?:
number
):
void
{
let
document
=
TextDocument
.
create
(
'
test://foo/bar.json
'
,
'
json
'
,
1
,
lines
.
join
(
'
\n
'
));
let
languageModes
=
getLanguageModes
({
css
:
true
,
javascript
:
true
});
let
actual
=
getFoldingRegions
(
languageModes
,
document
,
nRanges
,
null
)
!
.
ranges
;
let
actualRanges
=
[];
for
(
let
i
=
0
;
i
<
actual
.
length
;
i
++
)
{
actualRanges
[
i
]
=
r
(
actual
[
i
].
startLine
,
actual
[
i
].
endLine
,
actual
[
i
].
type
);
}
actualRanges
=
actualRanges
.
sort
((
r1
,
r2
)
=>
r1
.
startLine
-
r2
.
startLine
);
assert
.
deepEqual
(
actualRanges
,
expected
);
}
function
r
(
startLine
:
number
,
endLine
:
number
,
type
?:
string
):
ExpectedIndentRange
{
return
{
startLine
,
endLine
,
type
};
}
suite
(
'
Object Folding
'
,
()
=>
{
test
(
'
Fold one level
'
,
()
=>
{
let
input
=
[
/*0*/
'
<html>
'
,
/*1*/
'
Hello
'
,
/*2*/
'
</html>
'
];
assertRanges
(
input
,
[
r
(
0
,
1
)]);
});
test
(
'
Fold two level
'
,
()
=>
{
let
input
=
[
/*0*/
'
<html>
'
,
/*1*/
'
<head>
'
,
/*2*/
'
Hello
'
,
/*3*/
'
</head>
'
,
/*4*/
'
</html>
'
];
assertRanges
(
input
,
[
r
(
0
,
3
),
r
(
1
,
2
)]);
});
test
(
'
Fold siblings
'
,
()
=>
{
let
input
=
[
/*0*/
'
<html>
'
,
/*1*/
'
<head>
'
,
/*2*/
'
Head
'
,
/*3*/
'
</head>
'
,
/*4*/
'
<body class="f">
'
,
/*5*/
'
Body
'
,
/*6*/
'
</body>
'
,
/*7*/
'
</html>
'
];
assertRanges
(
input
,
[
r
(
0
,
6
),
r
(
1
,
2
),
r
(
4
,
5
)]);
});
// test('Fold self-closing tags', () => {
// let input = [
// /*0*/'<div>',
// /*1*/'<a src="top">',
// /*2*/'<img ',
// /*3*/'</head>',
// /*4*/'<body class="f">',
// /*5*/'Body',
// /*6*/'</body>',
// /*7*/'</html>'
// ];
// assertRanges(input, [r(0, 6), r(1, 2), r(4, 5)]);
// });
// test('Fold commment', () => {
// let input = [
// /*0*/'/*',
// /*1*/' multi line',
// /*2*/'*/',
// ];
// assertRanges(input, [r(0, 2, 'comment')]);
// });
// test('Fold regions', () => {
// let input = [
// /*0*/'// #region',
// /*1*/'{',
// /*2*/'}',
// /*3*/'// #endregion',
// ];
// assertRanges(input, [r(0, 3, 'region')]);
// });
// test('Test limit', () => {
// let input = [
// /* 0*/'[',
// /* 1*/' [',
// /* 2*/' [',
// /* 3*/' ',
// /* 4*/' ],',
// /* 5*/' [',
// /* 6*/' [',
// /* 7*/' ',
// /* 8*/' ],',
// /* 9*/' [',
// /*10*/' ',
// /*11*/' ],',
// /*12*/' ],',
// /*13*/' [',
// /*14*/' ',
// /*15*/' ],',
// /*16*/' [',
// /*17*/' ',
// /*18*/' ]',
// /*19*/' ]',
// /*20*/']',
// ];
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array'), r(2, 3, 'array'), r(5, 11, 'array'), r(6, 7, 'array'), r(9, 10, 'array'), r(13, 14, 'array'), r(16, 17, 'array')], void 0);
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array'), r(2, 3, 'array'), r(5, 11, 'array'), r(6, 7, 'array'), r(9, 10, 'array'), r(13, 14, 'array'), r(16, 17, 'array')], 8);
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array'), r(2, 3, 'array'), r(5, 11, 'array'), r(13, 14, 'array'), r(16, 17, 'array')], 7);
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array'), r(2, 3, 'array'), r(5, 11, 'array'), r(13, 14, 'array'), r(16, 17, 'array')], 6);
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array')], 5);
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array')], 4);
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array')], 3);
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array')], 2);
// assertRanges(input, [r(0, 19, 'array')], 1);
// });
});
extensions/html/server/src/utils/documentContext.ts
浏览文件 @
6804f4d9
...
...
@@ -7,7 +7,7 @@
import
{
DocumentContext
}
from
'
vscode-html-languageservice
'
;
import
{
endsWith
,
startsWith
}
from
'
../utils/strings
'
;
import
*
as
url
from
'
url
'
;
import
{
WorkspaceFolder
}
from
'
vscode-languageserver
-protocol/lib/protocol.workspaceFolders.proposed
'
;
import
{
WorkspaceFolder
}
from
'
vscode-languageserver
'
;
export
function
getDocumentContext
(
documentUri
:
string
,
workspaceFolders
:
WorkspaceFolder
[]):
DocumentContext
{
function
getRootFolder
():
string
|
undefined
{
...
...
extensions/html/server/yarn.lock
浏览文件 @
6804f4d9
...
...
@@ -18,12 +18,12 @@ jsonc-parser@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.0.tgz#ddcc864ae708e60a7a6dd36daea00172fa8d9272"
vscode-css-languageservice@^3.0.
6
:
version "3.0.
6
"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.
6.tgz#0e9230347040ba0161fba941885195215ec9be40
"
vscode-css-languageservice@^3.0.
8
:
version "3.0.
8
"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.
8.tgz#dc27a2f6eefd191bc603be6b9c0a59232a4c2b9f
"
dependencies:
vscode-languageserver-types "^3.6.
0-next.
1"
vscode-nls "^
2.0
.1"
vscode-languageserver-types "^3.6.1"
vscode-nls "^
3.2
.1"
vscode-emmet-helper@1.2.1:
version "1.2.1"
...
...
@@ -33,44 +33,52 @@ vscode-emmet-helper@1.2.1:
jsonc-parser "^1.0.0"
vscode-languageserver-types "^3.6.0-next.1"
vscode-html-languageservice@^2.
0.17-next.3
:
version "2.
0.17-next.3
"
resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-2.
0.17-next.3.tgz#dd5e90fac3073ffc2c624bd26daa9f27adfa50eb
"
vscode-html-languageservice@^2.
1.1
:
version "2.
1.1
"
resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-2.
1.1.tgz#11a4e307f3a983d566313039f99bb37656e86cce
"
dependencies:
vscode-languageserver-types "^3.6.
0-next.
1"
vscode-nls "^
2.0.2
"
vscode-uri "^1.0.
1
"
vscode-languageserver-types "^3.6.1"
vscode-nls "^
3.2.1
"
vscode-uri "^1.0.
3
"
vscode-jsonrpc@^3.6.0
-next.1
:
version "3.6.0
-next.1
"
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.0
-next.1.tgz#3cb463dffe5842d6aec16718ca9252708cd6aabe
"
vscode-jsonrpc@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.0
.tgz#848d56995d5168950d84feb5d9c237ae5c6a02d4
"
vscode-languageserver-protocol@^3.6.0
-next.5
:
version "3.6.0
-next.5
"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.6.0
-next.5.tgz#ed2ec2db759826f753c0a13977dfb2bedc4d31b3
"
vscode-languageserver-protocol@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.6.0
.tgz#579642cdcccf74b0cd771c33daa3239acb40d040
"
dependencies:
vscode-jsonrpc "^3.6.0-next.1"
vscode-languageserver-types "^3.6.0-next.1"
vscode-jsonrpc "^3.6.0"
vscode-languageserver-types "^3.6.0"
vscode-languageserver-types@^3.6.0, vscode-languageserver-types@^3.6.1:
version "3.6.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.6.1.tgz#4bc06a48dff653495f12f94b8b1e228988a1748d"
vscode-languageserver-types@^3.6.0-next.1:
version "3.6.0-next.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.6.0-next.1.tgz#98e488d3f87b666b4ee1a3d89f0023e246d358f3"
vscode-languageserver@
4.0.0-next.4
:
version "4.0.0
-next.4
"
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-4.0.0
-next.4.tgz#162440b15bedaab07e1676f046e4d9b8578b3d92
"
vscode-languageserver@
^4.0.0
:
version "4.0.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-4.0.0
.tgz#8b792f0d6d10acfe363d02371ed4ce53d08af88a
"
dependencies:
vscode-languageserver-protocol "^3.6.0
-next.5
"
vscode-languageserver-protocol "^3.6.0"
vscode-uri "^1.0.1"
vscode-nls@^2.0.1, vscode-nls@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da"
vscode-nls@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51"
vscode-nls@^3.2.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.2.tgz#3817eca5b985c2393de325197cf4e15eb2aa5350"
vscode-uri@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.1.tgz#11a86befeac3c4aa3ec08623651a3c81a6d0bbc8"
vscode-uri@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.3.tgz#631bdbf716dccab0e65291a8dc25c23232085a52"
extensions/html/yarn.lock
浏览文件 @
6804f4d9
...
...
@@ -34,30 +34,30 @@ vscode-extension-telemetry@0.0.15:
dependencies:
applicationinsights "1.0.1"
vscode-jsonrpc@^3.6.0
-next.1
:
version "3.6.0
-next.1
"
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.0
-next.1.tgz#3cb463dffe5842d6aec16718ca9252708cd6aabe
"
vscode-jsonrpc@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.0
.tgz#848d56995d5168950d84feb5d9c237ae5c6a02d4
"
vscode-languageclient@
4.0.0-next.9
:
version "4.0.0
-next.9
"
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-4.0.0
-next.9.tgz#2a06568f46ee9de3490f85e227d3740a21a03d3a
"
vscode-languageclient@
^4.0.0
:
version "4.0.0"
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-4.0.0
.tgz#635f5bfbcfa1385dae489b394857f1db8b459a7d
"
dependencies:
vscode-languageserver-protocol "^3.6.0
-next.5
"
vscode-languageserver-protocol "^3.6.0"
vscode-languageserver-protocol@^3.6.0
-next.5
:
version "3.6.0
-next.5
"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.6.0
-next.5.tgz#ed2ec2db759826f753c0a13977dfb2bedc4d31b3
"
vscode-languageserver-protocol@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.6.0
.tgz#579642cdcccf74b0cd771c33daa3239acb40d040
"
dependencies:
vscode-jsonrpc "^3.6.0
-next.1
"
vscode-languageserver-types "^3.6.0
-next.1
"
vscode-jsonrpc "^3.6.0"
vscode-languageserver-types "^3.6.0"
vscode-languageserver-types@^3.6.0
-next.1
:
version "3.6.
0-next.
1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.6.
0-next.1.tgz#98e488d3f87b666b4ee1a3d89f0023e246d358f3
"
vscode-languageserver-types@^3.6.0:
version "3.6.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.6.
1.tgz#4bc06a48dff653495f12f94b8b1e228988a1748d
"
vscode-nls@^3.2.
1
:
version "3.2.
1
"
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.
1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51
"
vscode-nls@^3.2.
2
:
version "3.2.
2
"
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.
2.tgz#3817eca5b985c2393de325197cf4e15eb2aa5350
"
zone.js@0.7.6:
version "0.7.6"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录