🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
DemoInstallSign in
Socket

dockerfile-language-service

Package Overview
Dependencies
Maintainers
1
Versions
35
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

dockerfile-language-service - npm Package Compare versions

Comparing version

to
0.15.0

16

CHANGELOG.md
# 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

2

lib/dockerDefinition.js

@@ -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"