dockerfile-language-service
Advanced tools
Comparing version
# Changelog | ||
All notable changes to this project will be documented in this file. | ||
## [0.15.0] - 2025-04-10 | ||
### Added | ||
- support preparing renames for here-documents ([#129](https://github.com/rcjsuen/dockerfile-language-service/issues/129)) | ||
- support preparing renames for a build stage referenced in a FROM ([#126](https://github.com/rcjsuen/dockerfile-language-service/issues/126)) | ||
- provide document links for GitHub Container Registry, Microsoft Artifact Registry, and Quay.io registries ([#134](https://github.com/rcjsuen/dockerfile-language-service/issues/134)) | ||
### Fixed | ||
- stop resolving definitions to build stages after the selected line ([#130](https://github.com/rcjsuen/dockerfile-language-service/issues/130)) | ||
- build stage references in FROM instructions will now be highlighted ([#128](https://github.com/rcjsuen/dockerfile-language-service/issues/128)) | ||
- build stage references in FROM instructions will now be included in rename edits ([#127](https://github.com/rcjsuen/dockerfile-language-service/issues/127)) | ||
- prevent TypeError from being thrown if an invalid heredoc is encountered ([#133](https://github.com/rcjsuen/dockerfile-language-service/issues/133)) | ||
- prevent invalid heredocs from crashing the linter or formatter ([rcjsuen/dockerfile-utils#127](https://github.com/rcjsuen/dockerfile-utils/issues/127)) | ||
## [0.14.0] - 2024-06-18 | ||
@@ -531,3 +544,4 @@ ### Added | ||
[Unreleased]: https://github.com/rcjsuen/dockerfile-language-service/compare/v0.14.0...HEAD | ||
[Unreleased]: https://github.com/rcjsuen/dockerfile-language-service/compare/v0.15.0...HEAD | ||
[0.15.0]: https://github.com/rcjsuen/dockerfile-language-service/compare/v0.14.0...v0.15.0 | ||
[0.14.0]: https://github.com/rcjsuen/dockerfile-language-service/compare/v0.13.0...v0.14.0 | ||
@@ -534,0 +548,0 @@ [0.13.0]: https://github.com/rcjsuen/dockerfile-language-service/compare/v0.12.0...v0.13.0 |
@@ -54,3 +54,3 @@ (function (factory) { | ||
var from = _e[_d]; | ||
if (stageName === from.getBuildStage()) { | ||
if (stageName === from.getBuildStage() && from.getRange().start.line < range.start.line) { | ||
return from.getBuildStageRange(); | ||
@@ -57,0 +57,0 @@ } |
@@ -112,4 +112,5 @@ (function (factory) { | ||
var isBuildStage = false; | ||
for (var _z = 0, _0 = dockerfile.getFROMs(); _z < _0.length; _z++) { | ||
var from = _0[_z]; | ||
var fromInstructions = dockerfile.getFROMs(); | ||
for (var _z = 0, fromInstructions_1 = fromInstructions; _z < fromInstructions_1.length; _z++) { | ||
var from = fromInstructions_1[_z]; | ||
var stage = from.getBuildStage(); | ||
@@ -122,2 +123,10 @@ if (stage && definition.toLowerCase() === stage.toLowerCase()) { | ||
if (isBuildStage) { | ||
for (var _0 = 0, fromInstructions_2 = fromInstructions; _0 < fromInstructions_2.length; _0++) { | ||
var from = fromInstructions_2[_0]; | ||
if (from.getRange().start.line > definitionRange.start.line) { | ||
if (from.getImageName() === definition) { | ||
highlights.push(vscode_languageserver_types_1.DocumentHighlight.create(from.getImageNameRange(), vscode_languageserver_types_1.DocumentHighlightKind.Read)); | ||
} | ||
} | ||
} | ||
for (var _1 = 0, _2 = dockerfile.getCOPYs(); _1 < _2.length; _1++) { | ||
@@ -124,0 +133,0 @@ var instruction = _2[_1]; |
@@ -7,3 +7,3 @@ (function (factory) { | ||
else if (typeof define === "function" && define.amd) { | ||
define(["require", "exports", "dockerfile-ast"], factory); | ||
define(["require", "exports", "vscode-languageserver-types", "dockerfile-ast"], factory); | ||
} | ||
@@ -18,2 +18,3 @@ })(function (require, exports) { | ||
exports.DockerLinks = void 0; | ||
var vscode_languageserver_types_1 = require("vscode-languageserver-types"); | ||
var dockerfile_ast_1 = require("dockerfile-ast"); | ||
@@ -36,2 +37,28 @@ var DockerLinks = /** @class */ (function () { | ||
var name = from.getImageName(); | ||
var registry = from.getRegistry(); | ||
if (registry === "ghcr.io") { | ||
var idx = name.lastIndexOf("/"); | ||
if (idx === -1) { | ||
continue; | ||
} | ||
links.push({ | ||
range: vscode_languageserver_types_1.Range.create(from.getRegistryRange().start, from.getImageNameRange().end), | ||
target: "https://github.com/".concat(name, "/pkgs/container/").concat(name.substring(idx + 1)) | ||
}); | ||
continue; | ||
} | ||
if (registry === "mcr.microsoft.com") { | ||
links.push({ | ||
range: vscode_languageserver_types_1.Range.create(from.getRegistryRange().start, from.getImageNameRange().end), | ||
target: "https://mcr.microsoft.com/artifact/mar/" + name | ||
}); | ||
continue; | ||
} | ||
if (registry === "quay.io") { | ||
links.push({ | ||
range: vscode_languageserver_types_1.Range.create(from.getRegistryRange().start, from.getImageNameRange().end), | ||
target: "https://quay.io/repository/" + name | ||
}); | ||
continue; | ||
} | ||
if (name !== null && stages.indexOf(name) === -1) { | ||
@@ -38,0 +65,0 @@ if (name.indexOf('/') === -1) { |
@@ -37,7 +37,18 @@ (function (factory) { | ||
} | ||
for (var _b = 0, _c = image.getFROMs(); _b < _c.length; _b++) { | ||
var from = _c[_b]; | ||
var fromInstructions = dockerfile.getFROMs(); | ||
for (var _b = 0, fromInstructions_1 = fromInstructions; _b < fromInstructions_1.length; _b++) { | ||
var from = fromInstructions_1[_b]; | ||
if (docker_1.Util.isInsideRange(position, from.getBuildStageRange())) { | ||
return from.getBuildStageRange(); | ||
} | ||
var range = from.getImageNameRange(); | ||
if (docker_1.Util.isInsideRange(position, range)) { | ||
var imageName = from.getImageName(); | ||
for (var _c = 0, fromInstructions_2 = fromInstructions; _c < fromInstructions_2.length; _c++) { | ||
var stageCheck = fromInstructions_2[_c]; | ||
if (stageCheck.getBuildStage() === imageName && stageCheck.getBuildStageRange().start.line < range.start.line) { | ||
return range; | ||
} | ||
} | ||
} | ||
} | ||
@@ -68,2 +79,15 @@ for (var _d = 0, _e = image.getENVs(); _d < _e.length; _d++) { | ||
} | ||
if (instruction instanceof dockerfile_ast_1.Copy || instruction instanceof dockerfile_ast_1.Run) { | ||
for (var _p = 0, _q = instruction.getHeredocs(); _p < _q.length; _p++) { | ||
var heredoc = _q[_p]; | ||
var range = heredoc.getNameRange(); | ||
if (docker_1.Util.isInsideRange(position, range)) { | ||
return range; | ||
} | ||
range = heredoc.getDelimiterRange(); | ||
if (docker_1.Util.isInsideRange(position, range)) { | ||
return range; | ||
} | ||
} | ||
} | ||
} | ||
@@ -70,0 +94,0 @@ return null; |
@@ -11,3 +11,3 @@ { | ||
], | ||
"version": "0.14.0", | ||
"version": "0.15.0", | ||
"author": "Remy Suen", | ||
@@ -24,4 +24,4 @@ "license": "MIT", | ||
"dependencies": { | ||
"dockerfile-ast": "0.6.1", | ||
"dockerfile-utils": "0.16.1", | ||
"dockerfile-ast": "0.7.0", | ||
"dockerfile-utils": "0.16.2", | ||
"vscode-languageserver-textdocument": "1.0.8", | ||
@@ -35,3 +35,3 @@ "vscode-languageserver-types": "3.17.3" | ||
"@types/node": "^6.0.52", | ||
"mocha": "^9.1.3", | ||
"mocha": "^11.1.0", | ||
"nyc": "^17.0.0", | ||
@@ -38,0 +38,0 @@ "typescript": "^5.2.2" |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
5783
1.05%374087
-67.14%42
-6.67%+ Added
+ Added
- Removed
- Removed
Updated
Updated