Dive into secure and efficient coding practices with our curated list of the top 10 examples showcasing 'dockerfile-ast' in functional components in JavaScript. Our advanced machine learning engine meticulously scans each line of code, cross-referencing millions of open source libraries to ensure your implementation is not just functional, but also robust and secure. Elevate your React applications to new heights by mastering the art of handling side effects, API calls, and asynchronous operations with confidence and precision.
public formatOnType(document: TextDocument, position: Position, ch: string, options: FormattingOptions): TextEdit[] {
const dockerfile = DockerfileParser.parse(document.getText());
// check that the inserted character is the escape character
if (dockerfile.getEscapeCharacter() === ch) {
for (let comment of dockerfile.getComments()) {
// ignore if we're in a comment
if (comment.getRange().start.line === position.line) {
return [];
}
}
const directive = dockerfile.getDirective();
// ignore if we're in the parser directive
if (directive && position.line === 0) {
return [];
}
const content = document.getText();
public computeProposals(document: TextDocument, position: Position): CompletionItem[] | PromiseLike {
let buffer = document.getText();
let offset = document.offsetAt(position);
let dockerfile = DockerfileParser.parse(buffer);
let escapeCharacter = dockerfile.getEscapeCharacter();
let directive = dockerfile.getDirective();
if (directive !== null && position.line === 0) {
let range = directive.getNameRange();
if (position.character <= range.start.character) {
// in whitespace before the directive's name
return [this.createEscape(0, offset, Directive.escape)];
} else if (position.character <= range.end.character) {
// in the name
return [this.createEscape(position.character - range.start.character, offset, Directive.escape)];
}
return [];
}
// directive only possible on the first line
onHover(document: TextDocument, textDocumentPosition: TextDocumentPositionParams): Hover | null {
let dockerfile = DockerfileParser.parse(document.getText());
let directive = dockerfile.getDirective();
let image = dockerfile.getContainingImage(textDocumentPosition.position);
if (textDocumentPosition.position.line === 0 && directive !== null && directive.getDirective() === Directive.escape) {
let range = directive.getNameRange();
if (Util.isInsideRange(textDocumentPosition.position, range)) {
return this.markdown.getMarkdown(Directive.escape);
}
}
for (let instruction of image.getInstructions()) {
for (let variable of instruction.getVariables()) {
// are we hovering over a variable
if (Util.isInsideRange(textDocumentPosition.position, variable.getNameRange())) {
let resolved = image.resolveVariable(variable.getName(), variable.getNameRange().start.line);
if (resolved || resolved === "") {
validate(document: TextDocument): Diagnostic[] {
this.document = document;
let problems: Diagnostic[] = [];
let dockerfile = DockerfileParser.parse(document.getText());
this.parseDirective(dockerfile, problems);
let instructions = dockerfile.getInstructions();
if (instructions.length === 0 || dockerfile.getARGs().length === instructions.length) {
// no instructions in this file, or only ARGs
problems.push(Validator.createNoSourceImage(document.positionAt(0), document.positionAt(0)));
}
let cmds = dockerfile.getCMDs();
if (cmds.length > 1) {
// more than one CMD found, warn the user
for (let cmd of cmds) {
let diagnostic = this.createMultipleInstructions(cmd.getInstructionRange(), this.settings.instructionCmdMultiple, "CMD");
if (diagnostic) {
problems.push(diagnostic);
}
}
public computeProposals(document: TextDocument, position: Position): CompletionItem[] | PromiseLike {
let buffer = document.getText();
let offset = document.offsetAt(position);
let dockerfile = DockerfileParser.parse(buffer);
let escapeCharacter = dockerfile.getEscapeCharacter();
let directive = dockerfile.getDirective();
if (directive !== null && position.line === 0) {
let range = directive.getNameRange();
if (position.character <= range.start.character) {
// in whitespace before the directive's name
return [this.createEscape(0, offset, Directive.escape)];
} else if (position.character <= range.end.character) {
// in the name
return [this.createEscape(position.character - range.start.character, offset, Directive.escape)];
}
return [];
}
// directive only possible on the first line
let comments = dockerfile.getComments();
if (comments.length !== 0) {
if (position.line === 0) {
let commentRange = comments[0].getRange();
// check if the first comment is on the first line
if (commentRange.start.line === 0) {
// is the user inside the comment
if (commentRange.start.character < position.character) {
let range = comments[0].getContentRange();
if (range === null || position.character <= range.start.character) {
// in whitespace
parseDirective(dockerfile: Dockerfile, problems: Diagnostic[]) {
let directive = dockerfile.getDirective();
if (directive === null) {
return;
}
let directiveName = directive.getDirective();
let value = directive.getValue();
if (directiveName === Directive.escape) {
if (value !== '\\' && value !== '`' && value !== "") {
// if the directive's value is invalid or isn't the empty string, flag it
let range = directive.getValueRange();
problems.push(Validator.createInvalidEscapeDirective(range.start, range.end, value));
}
if (directive.getName() !== Directive.escape) {
let range = directive.getNameRange();
let diagnostic = this.createLowercaseDirective(range.start, range.end);
if (diagnostic) {
problems.push(diagnostic);
}
}
}
}
onHover(document: TextDocument, textDocumentPosition: TextDocumentPositionParams): Hover | null {
let dockerfile = DockerfileParser.parse(document.getText());
let directive = dockerfile.getDirective();
let image = dockerfile.getContainingImage(textDocumentPosition.position);
if (textDocumentPosition.position.line === 0 && directive !== null && directive.getDirective() === Directive.escape) {
let range = directive.getNameRange();
if (Util.isInsideRange(textDocumentPosition.position, range)) {
return this.markdown.getMarkdown(Directive.escape);
}
}
for (let instruction of image.getInstructions()) {
for (let variable of instruction.getVariables()) {
// are we hovering over a variable
if (Util.isInsideRange(textDocumentPosition.position, variable.getNameRange())) {
let resolved = image.resolveVariable(variable.getName(), variable.getNameRange().start.line);
if (resolved || resolved === "") {
return { contents: resolved };
} else if (resolved === null) {
return null;
}
}
}
}
parseDirective(dockerfile: Dockerfile, problems: Diagnostic[]) {
let directive = dockerfile.getDirective();
if (directive === null) {
return;
}
let directiveName = directive.getDirective();
let value = directive.getValue();
if (directiveName === Directive.escape) {
if (value !== '\\' && value !== '`' && value !== "") {
// if the directive's value is invalid or isn't the empty string, flag it
let range = directive.getValueRange();
problems.push(Validator.createInvalidEscapeDirective(range.start, range.end, value));
}
if (directive.getName() !== Directive.escape) {
let range = directive.getNameRange();
let diagnostic = this.createLowercaseDirective(range.start, range.end);
if (diagnostic) {
problems.push(diagnostic);
}
}
}
}
// check if the first comment is on the first line
if (commentRange.start.line === 0) {
// is the user inside the comment
if (commentRange.start.character < position.character) {
let range = comments[0].getContentRange();
if (range === null || position.character <= range.start.character) {
// in whitespace
return [this.createEscape(0, offset, Directive.escape)];
}
let comment = comments[0].getContent();
if (position.character <= range.end.character) {
// within the content
let prefix = comment.substring(0, position.character - range.start.character);
// substring check
if (Directive.escape.indexOf(prefix.toLowerCase()) === 0) {
return [this.createEscape(prefix.length, offset, Directive.escape)];
}
}
return [];
}
}
} else {
for (let comment of comments) {
let range = comment.getRange();
if (range.start.line === position.line) {
if (range.start.character < position.character && position.character <= range.end.character) {
// inside a comment
return [];
}
}
}
}
onHover(document: TextDocument, textDocumentPosition: TextDocumentPositionParams): Hover | null {
let dockerfile = DockerfileParser.parse(document.getText());
let directive = dockerfile.getDirective();
let image = dockerfile.getContainingImage(textDocumentPosition.position);
if (textDocumentPosition.position.line === 0 && directive !== null && directive.getDirective() === Directive.escape) {
let range = directive.getNameRange();
if (Util.isInsideRange(textDocumentPosition.position, range)) {
return this.markdown.getMarkdown(Directive.escape);
}
}
for (let instruction of image.getInstructions()) {
for (let variable of instruction.getVariables()) {
// are we hovering over a variable
if (Util.isInsideRange(textDocumentPosition.position, variable.getNameRange())) {
let resolved = image.resolveVariable(variable.getName(), variable.getNameRange().start.line);
if (resolved || resolved === "") {
return { contents: resolved };
} else if (resolved === null) {
return null;
}