dockerfile-language-service
Advanced tools
Comparing version
# Changelog | ||
All notable changes to this project will be documented in this file. | ||
## [0.12.0] - 2024-05-04 | ||
### Added | ||
- support navigating the definitions of heredocs ([#122](https://github.com/rcjsuen/dockerfile-language-service/issues/122)) | ||
### Changed | ||
- altered the return type of `setCapabilities(Capabilities)` in `DockerfileLanguageService` | ||
- previously it was implicitly set as `any` but it has now been changed to `void` | ||
- the implementation never did return anything so this should hopefully not affect anyone using the library | ||
## [0.11.0] - 2023-09-10 | ||
@@ -15,2 +24,5 @@ ### Added | ||
### Fixed | ||
- correct link range calculation if tag provided with a digest ([#120](https://github.com/rcjsuen/dockerfile-language-service/issues/120)) | ||
## [0.10.2] - 2023-06-01 | ||
@@ -508,3 +520,4 @@ ### Fixed | ||
[Unreleased]: https://github.com/rcjsuen/dockerfile-language-service/compare/v0.11.0...HEAD | ||
[Unreleased]: https://github.com/rcjsuen/dockerfile-language-service/compare/v0.12.0...HEAD | ||
[0.12.0]: https://github.com/rcjsuen/dockerfile-language-service/compare/v0.11.0...v0.12.0 | ||
[0.11.0]: https://github.com/rcjsuen/dockerfile-language-service/compare/v0.10.2...v0.11.0 | ||
@@ -511,0 +524,0 @@ [0.10.2]: https://github.com/rcjsuen/dockerfile-language-service/compare/v0.10.1...v0.10.2 |
@@ -13,2 +13,3 @@ import { Range, Position } from 'vscode-languageserver-types'; | ||
static isInsideRange(position: Position, range: Range): boolean; | ||
static isEmpty(range: Range): boolean; | ||
static rangeEquals(range: Range, range2: Range): boolean; | ||
@@ -15,0 +16,0 @@ static positionEquals(position: Position, position2: Position): boolean; |
@@ -69,2 +69,5 @@ (function (factory) { | ||
}; | ||
Util.isEmpty = function (range) { | ||
return range.start.line === range.end.line && range.start.character === range.end.character; | ||
}; | ||
Util.rangeEquals = function (range, range2) { | ||
@@ -71,0 +74,0 @@ return Util.positionEquals(range.start, range2.start) && Util.positionEquals(range.end, range2.end); |
@@ -7,2 +7,4 @@ import { Position, Range, Location, TextDocumentIdentifier } from 'vscode-languageserver-types'; | ||
static findDefinition(dockerfile: Dockerfile, position: Position): Property; | ||
private static checkHeredocs; | ||
private static computeHeredocDefinition; | ||
private computeVariableDefinition; | ||
@@ -9,0 +11,0 @@ computeDefinitionRange(content: string, position: Position): Range | null; |
@@ -144,2 +144,34 @@ (function (factory) { | ||
}; | ||
DockerDefinition.checkHeredocs = function (heredocs, position) { | ||
for (var _i = 0, heredocs_1 = heredocs; _i < heredocs_1.length; _i++) { | ||
var heredoc = heredocs_1[_i]; | ||
var nameRange = heredoc.getNameRange(); | ||
if (docker_1.Util.isInsideRange(position, nameRange)) { | ||
return docker_1.Util.isEmpty(nameRange) ? null : nameRange; | ||
} | ||
var delimiterRange = heredoc.getDelimiterRange(); | ||
if (delimiterRange !== null && docker_1.Util.isInsideRange(position, delimiterRange)) { | ||
return nameRange; | ||
} | ||
} | ||
return null; | ||
}; | ||
DockerDefinition.computeHeredocDefinition = function (dockerfile, position) { | ||
for (var _i = 0, _a = dockerfile.getInstructions(); _i < _a.length; _i++) { | ||
var instruction = _a[_i]; | ||
if (instruction instanceof dockerfile_ast_1.Copy) { | ||
var range = DockerDefinition.checkHeredocs(instruction.getHeredocs(), position); | ||
if (range !== null) { | ||
return range; | ||
} | ||
} | ||
else if (instruction instanceof dockerfile_ast_1.Run) { | ||
var range = DockerDefinition.checkHeredocs(instruction.getHeredocs(), position); | ||
if (range !== null) { | ||
return range; | ||
} | ||
} | ||
} | ||
return null; | ||
}; | ||
DockerDefinition.prototype.computeVariableDefinition = function (dockerfile, position) { | ||
@@ -164,2 +196,6 @@ var property = DockerDefinition.findDefinition(dockerfile, position); | ||
} | ||
range = DockerDefinition.computeHeredocDefinition(dockerfile, position); | ||
if (range !== null) { | ||
return vscode_languageserver_types_1.Location.create(textDocument.uri, range); | ||
} | ||
return null; | ||
@@ -166,0 +202,0 @@ }; |
@@ -98,3 +98,3 @@ import { Position, CompletionItem, Range, CodeActionContext, Command, TextDocumentIdentifier, Location, DocumentHighlight, SymbolInformation, SignatureHelp, TextEdit, DocumentLink, Hover, FormattingOptions, Diagnostic, MarkupKind, FoldingRange, CompletionItemTag, SemanticTokens } from 'vscode-languageserver-types'; | ||
export interface DockerfileLanguageService { | ||
setCapabilities(capabilities: Capabilities): any; | ||
setCapabilities(capabilities: Capabilities): void; | ||
computeCodeActions(textDocument: TextDocumentIdentifier, range: Range, context: CodeActionContext): Command[]; | ||
@@ -101,0 +101,0 @@ computeCommandEdits(content: string, command: string, args: any[]): TextEdit[]; |
@@ -11,3 +11,3 @@ { | ||
], | ||
"version": "0.11.0", | ||
"version": "0.12.0", | ||
"author": "Remy Suen", | ||
@@ -14,0 +14,0 @@ "license": "MIT", |
367218
0.76%5709
0.74%