mikx1's picture
Upload folder using huggingface_hub
b5ea024
raw
history blame
1.9 kB
import { re } from './id.js';
/** @typedef {import('estree').Comment} Comment */
/** @typedef {import('estree').Node} Node */
/**
* @typedef {Node & {
* start: number;
* end: number;
* has_trailing_newline?: boolean
* }} NodeWithLocation
*/
/**
* @typedef {Comment & {
* start: number;
* end: number;
* has_trailing_newline?: boolean
* }} CommentWithLocation
*/
/**
* @param {CommentWithLocation[]} comments
* @param {string} raw
*/
export const get_comment_handlers = (comments, raw) => ({
// pass to acorn options
/**
* @param {boolean} block
* @param {string} value
* @param {number} start
* @param {number} end
*/
onComment: (block, value, start, end) => {
if (block && /\n/.test(value)) {
let a = start;
while (a > 0 && raw[a - 1] !== '\n') a -= 1;
let b = a;
while (/[ \t]/.test(raw[b])) b += 1;
const indentation = raw.slice(a, b);
value = value.replace(new RegExp(`^${indentation}`, 'gm'), '');
}
comments.push({ type: block ? 'Block' : 'Line', value, start, end });
},
// pass to estree-walker options
/** @param {NodeWithLocation} node */
enter(node) {
let comment;
while (comments[0] && comments[0].start < node.start) {
comment = comments.shift();
comment.value = comment.value.replace(
re,
(match, id, at, hash, value) => {
if (hash) return `#${value}`;
if (at) return `@${value}`;
return match;
}
);
const next = comments[0] || node;
comment.has_trailing_newline =
comment.type === 'Line' ||
/\n/.test(raw.slice(comment.end, next.start));
(node.leadingComments || (node.leadingComments = [])).push(comment);
}
},
/** @param {NodeWithLocation} node */
leave(node) {
if (comments[0]) {
const slice = raw.slice(node.end, comments[0].start);
if (/^[,) \t]*$/.test(slice)) {
node.trailingComments = [comments.shift()];
}
}
}
});