find_code 插件 react_vite

find_code 插件 react_vite

const fs = require("fs");
const path = require("path");
const parser = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const generate = require("@babel/generator").default;// 读取文件内容
const filePath = path.join(__dirname, "index.tsx");
const code = fs.readFileSync(filePath, "utf8");// 解析代码生成 AST
const ast = parser.parse(code, {sourceType: "module",plugins: ["jsx"],
});// 遍历 AST
// 遍历 AST
traverse(ast, {JSXOpeningElement(path) {const line = path.node.loc.start.line;const pathAttribute = {type: "JSXAttribute",name: { type: "JSXIdentifier", name: "path" },value: {type: "StringLiteral",value: `${filePath}:${line}`,},};// 检查是否已经存在 path 属性,如果不存在则添加const existingPathAttribute = path.node.attributes.find((attr) => {return (attr.name &&attr.name.type === "JSXIdentifier" &&attr.name.name === "path");});if (!existingPathAttribute) {path.node.attributes.push(pathAttribute);}},
});// 生成新代码,设置 retainLines 为 true 避免生成不必要的转义序列
const { code: newCode } = generate(ast, {retainLines: true,jsescOption: {minimal: true,},
});// 写入文件
fs.writeFileSync(filePath, newCode, "utf8");console.log("代码修改完成");
// module
import fs from "fs/promises";
import path from "path";
import parser from "@babel/parser";
import traverse from "@babel/traverse";
import generate from "@babel/generator";
// 定义处理文件的异步函数
async function processFile(filePath) {try {// 读取文件内容const code = await fs.readFile(filePath, "utf8");// 解析代码生成 ASTconst ast = parser.parse(code, {sourceType: "module",plugins: ["jsx"],});// 遍历 ASTtraverse.default(ast, {JSXOpeningElement(path) {const line = path?.node?.loc?.start?.line;const pathAttribute = {type: "JSXAttribute",name: { type: "JSXIdentifier", name: "path" },value: {type: "StringLiteral",value: `${filePath}:${line}`,},};// 检查是否已经存在 path 属性,如果不存在则添加const existingPathAttribute = path.node.attributes.find((attr) => {return (attr?.name &&attr?.name.type === "JSXIdentifier" &&attr?.name.name === "path");});if (!existingPathAttribute) {path.node.attributes.push(pathAttribute);}},});// 生成新代码,设置 retainLines 为 true 避免生成不必要的转义序列const { code: newCode } = generate.default(ast, {retainLines: true,jsescOption: {minimal: true,},});// 写入文件await fs.writeFile(filePath, newCode, "utf8");console.log("代码修改完成");} catch (error) {console.error("处理文件时出错:", error);}
}// 获取要处理的文件路径
const filePath = path.join(process.cwd(), "node/index.tsx");
// 调用处理函数
processFile(filePath);

代码修改完成效果

import React from "react";
const Test = () => {return (<div path="/Users/guojie/跳槽学习文档——速成/vite/node/index.tsx:4">我是根目录<div path="/Users/guojie/跳槽学习文档——速成/vite/node/index.tsx:6">我是子目录</div><span path="/Users/guojie/跳槽学习文档——速成/vite/node/index.tsx:7">我是孙目录</span></div>);
};
export default Test;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97981.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机秒变全栈IDE:Claude Code UI的深度体验

还在为只能在命令行中使用Claude Code而苦恼吗&#xff1f;想在移动设备上继续你的AI编程对话吗&#xff1f;Claude Code UI的出现彻底改变了这一切。这个开源项目为Anthropic官方的Claude Code CLI工具提供了现代化的Web界面&#xff0c;让你能够在任何设备、任何地方与AI编程…

F5发布后量子API安全解决方案,以AI驱动全面防护应对量子计算威胁

量子计算的飞速演进&#xff0c;正对传统加密体系构成日益严峻的安全威胁。Gartner预测显示&#xff0c;到2029年&#xff0c;量子计算机有望攻破目前普遍采用的公钥加密算法&#xff0c;这一风险正倒逼全球企业加速密码体系的更迭与升级。面对这一挑战&#xff0c;F5公司——应…

深度剖析 DC - DC 转换器在新能源汽车中的关键应用

在新能源汽车的发展进程中&#xff0c;DC - DC 转换器扮演着至关重要的角色。以下将详细介绍其在新能源汽车上的应用&#xff0c;包括作用、电路组成以及工作原理等方面。DC - DC 转换器的作用简单来说&#xff0c;新能源汽车上的 DC - DC 转换器是一个 “降压型电压变换器”。…

【标准项目】在线五子棋对决(下)

在线五子棋对决一. 项目介绍及链接二. 项目结构设计项目模块划分业务处理模块的子模块划分项目流程图玩家流程图服务器流程图三. 数据管理模块数据库设计创建 user_table 类四. 在线用户管理模块五. 游戏房间管理模块游戏房间类实现游戏房间管理类实现六. Session 管理模块Sess…

重构导航之核:高德地图的深度学习架构解析 导论:从数字化世界到可计算世界

导论&#xff1a;从数字化世界到可计算世界 数字地图的演进&#xff0c;本质上是一场关于“世界可计算性”的持续探索。第一代地图的核心任务是数字化转录&#xff08;Digital Transcription&#xff09;&#xff0c;它成功地将物理世界的静态元素——道路、建筑、兴趣点&#…

逻辑回归(sigmoid函数、混淆矩阵、精确率召回率F1)

目录 一、概述 1、逻辑回归 2、激活函数 sigmoid函数 3、最大似然估计 二、逻辑回归 1、原理 2、损失函数 3、代码 三、混淆矩阵 1、定义 2、举例 3、代码 四、分类评估方法 1、精确率&#xff08;Precision&#xff09; 2、召回率&#xff08;Recall&#xff09; 3、F1&#…

Redis底层实现原理之五大基础结构

文章目录1. 基础结构和编码类型2. 编码类型和数据结构实现2.1 字符串&#xff08;String&#xff09;2.2 压缩列表&#xff08;listpack&#xff09;2.3 哈希表&#xff08;hashtable&#xff09;2.4 快速列表&#xff08;quicklist&#xff09;2.5 整数集合&#xff08;intset…

火山引擎数据智能体DataAgent总结分享

数据的冰山:看得见的资产与看不见的鸿沟 这张图片用“冰山”类比的方式展示了数据资产管理中的可见与不可见问题,并突出了数据利用的核心挑战与潜在陷阱。 1. 冰山之上的“看得见的资产” 内容:数据库、报表、指标等结构化、显性的数据资源。 核心挑战: 需要从“采集存储”…

100种高级数据结构 (速查表)

一、 基础结构的扩展与组合 (Advanced Linear Structures) 这些结构在数组、链表、队列、栈等基础结构上增加了特定功能或约束。双端队列 (Deque - Double-Ended Queue) 介绍&#xff1a;允许在队列的前后两端都进行插入和删除操作的线性结构。应用场景&#xff1a;工作窃取算法…

一个开源的企业官网简介

简介一个完美的企业官网系统,支持手机端和电脑端展示企业风采,还可以展示企业产品/企业新闻资讯等等.普通用户PC端展示普通用户手机端展示管理后台

TCP实现线程池竞争任务

服务端&#xff1a;#include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<netinet/ip.h> #include<strings.h> #include<unistd.h> #include<ctype.h> #include<arpa/inet.h&…

Redis C++ 实现笔记(F篇)

Implementing Redis in C : F Redis C 实现笔记&#xff08;F篇&#xff09; 前言 本章代码及思路均来自Build Your Own Redis with C/C 本文章只阐述我的理解想法&#xff0c;以及需要注意的地方。 本文章为续<<Implementing Redis in C : E>>所以本文章不再…

finally 与 return的执行顺序

一、第一次试验public static void main(String[] args) throws InterruptedException {System.out.println(aaa(null));}private static StringBuilder aaa(Integer i) throws InterruptedException {StringBuilder sb new StringBuilder();try {i.toString();return sb;} ca…

Git安装教程

简介 Git 是目前全球最流行的分布式版本控制系统&#xff08;Distributed Version Control System, DVCS&#xff09;&#xff0c;核心作用是追踪文件修改历史、支持多人协同开发&#xff0c;并能高效管理代码&#xff08;或任何文本类文件&#xff09;的版本迭代。它由 Linux…

Linux安装RTL8821CE无线网卡驱动

1. 查看网卡芯片$ lspci | grep Net 01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8821CE 802.11ac PCIe Wireless Network Adapter2. 预备配套sudo apt install -y dkms git3. 下载驱动并安装git clone https://github.com/tomaspinho/rtl8821ce.git cd r…

vue3存储/获取本地或会话存储,封装存储工具,结合pina使用存储

目录 一、基本用法&#xff08;原生 API&#xff09; 1. 存储数据 2. 获取数据 3. 删除数据 二、Vue3 中封装成工具函数&#xff08;推荐&#xff09; 三、以上工具函数在 Vue3 组件中使用 1. 在选项式 API 中使用 2. 在组合式 API&#xff08;setup 语法糖&#xff09;…

【Flink】DataStream API:基本转换算子、聚合算子

目录基本转换算子映射&#xff08;map&#xff09;过滤&#xff08;filter&#xff09;扁平映射聚合算子按键分区&#xff08;keyBy&#xff09;简单聚合&#xff08;sum/min/max/minBy/maxBy&#xff09;规约聚合&#xff08;reduce&#xff09;基本转换算子 有如下POJO类用来…

从淘宝推荐到微信搜索:查找算法如何支撑亿级用户——动画可视化

本篇技术博文摘要 &#x1f31f; 本文通过动画可视化深入解析数据结构中的核心查找算法&#xff0c;从基础概念到高阶应用&#xff0c;全面覆盖顺序查找、折半查找、分块查找、B树/B树及散列查找的核心原理与实现细节。文章以动态演示为核心工具&#xff0c;直观展现算法执行过…

图像正向扭曲反向扭曲

在图像处理领域&#xff0c;正向扭曲&#xff08;Forward Warping&#xff09;和反向扭曲&#xff08;Backward Warping&#xff09;是两种核心的图像坐标映射与像素重采样技术&#xff0c;核心区别在于“像素映射的方向”——是从“原始图像”到“目标图像”&#xff0c;还是从…

【C语言】 第三课 函数与栈帧机制详解

1 函数的基本概念 在C语言中&#xff0c;函数是程序的基本执行单元。一个函数的定义包括返回类型、函数名、参数列表和函数体。例如&#xff1a; int add(int x, int y) { // 函数定义int z x y;return z; }在使用函数前&#xff0c;通常需要声明&#xff08; declaration&am…