42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
// This file contains methods responsible for dealing with comments.
|
|
import * as t from "@babel/types";
|
|
|
|
/**
|
|
* Share comments amongst siblings.
|
|
*/
|
|
|
|
export function shareCommentsWithSiblings() {
|
|
// NOTE: this assumes numbered keys
|
|
if (typeof this.key === "string") return;
|
|
|
|
const node = this.node;
|
|
if (!node) return;
|
|
|
|
const trailing = node.trailingComments;
|
|
const leading = node.leadingComments;
|
|
if (!trailing && !leading) return;
|
|
|
|
const prev = this.getSibling(this.key - 1);
|
|
const next = this.getSibling(this.key + 1);
|
|
const hasPrev = Boolean(prev.node);
|
|
const hasNext = Boolean(next.node);
|
|
if (hasPrev && hasNext) {
|
|
} else if (hasPrev) {
|
|
prev.addComments("trailing", trailing);
|
|
} else if (hasNext) {
|
|
next.addComments("leading", leading);
|
|
}
|
|
}
|
|
|
|
export function addComment(type: string, content: string, line?: boolean) {
|
|
t.addComment(this.node, type, content, line);
|
|
}
|
|
|
|
/**
|
|
* Give node `comments` of the specified `type`.
|
|
*/
|
|
|
|
export function addComments(type: string, comments: Array) {
|
|
t.addComments(this.node, type, comments);
|
|
}
|