Skip to content

Commit 4245611

Browse files
changes
1 parent 056da98 commit 4245611

File tree

4 files changed

+203
-23
lines changed

4 files changed

+203
-23
lines changed

modules/codeutils.js

Lines changed: 88 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,36 @@
11
"use strict";
2+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3+
if (k2 === undefined) k2 = k;
4+
var desc = Object.getOwnPropertyDescriptor(m, k);
5+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6+
desc = { enumerable: true, get: function() { return m[k]; } };
7+
}
8+
Object.defineProperty(o, k2, desc);
9+
}) : (function(o, m, k, k2) {
10+
if (k2 === undefined) k2 = k;
11+
o[k2] = m[k];
12+
}));
13+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14+
Object.defineProperty(o, "default", { enumerable: true, value: v });
15+
}) : function(o, v) {
16+
o["default"] = v;
17+
});
18+
var __importStar = (this && this.__importStar) || function (mod) {
19+
if (mod && mod.__esModule) return mod;
20+
var result = {};
21+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22+
__setModuleDefault(result, mod);
23+
return result;
24+
};
225
var __importDefault = (this && this.__importDefault) || function (mod) {
326
return (mod && mod.__esModule) ? mod : { "default": mod };
427
};
528
Object.defineProperty(exports, "__esModule", { value: true });
629
const websocket_1 = __importDefault(require("./websocket"));
30+
const fs = __importStar(require("fs"));
31+
const path_1 = __importDefault(require("path"));
32+
const tree_sitter_1 = __importDefault(require("tree-sitter"));
33+
const tree_sitter_javascript_1 = __importDefault(require("tree-sitter-javascript"));
734
/**
835
* A utility module for working with code.
936
*/
@@ -16,19 +43,73 @@ const cbcodeutils = {
1643
getJsTree: (filePath) => {
1744
return new Promise(async (resolve, reject) => {
1845
websocket_1.default.getWebsocket.send(JSON.stringify({
19-
"type": "codeEvent",
20-
"action": "getJsTree",
21-
payload: {
22-
filePath
23-
}
46+
"type": "settingEvent",
47+
"action": "getProjectPath"
2448
}));
2549
websocket_1.default.getWebsocket.on('message', (data) => {
2650
const response = JSON.parse(data);
27-
if (response.type === "getJsTreeResponse") {
28-
resolve(response); // Resolve the Promise with the response data
51+
if (response.type === "getProjectPathResponse") {
52+
// resolve(response);
53+
try {
54+
let pathInput = response.projectPath;
55+
let parser = new tree_sitter_1.default();
56+
// Initialize the parser with the JavaScript language
57+
parser.setLanguage(tree_sitter_javascript_1.default);
58+
const trees = [];
59+
const functionNodes = [];
60+
const processDirectory = (directory) => {
61+
console.log("isdir");
62+
// Read all files in the directory
63+
const files = fs.readdirSync(directory, { withFileTypes: true });
64+
files.forEach(file => {
65+
if (file.isDirectory()) {
66+
if (file.name !== 'node_modules') { // Ignore node_modules directory
67+
processDirectory(path_1.default.join(directory, file.name)); // Recursive call for subdirectories
68+
}
69+
}
70+
else if (path_1.default.extname(file.name) === '.js') {
71+
const code = fs.readFileSync(path_1.default.join(directory, file.name), 'utf-8');
72+
console.log(code);
73+
let tree = parser.parse(code);
74+
tree.rootNode.path = path_1.default.join(directory, file.name); // Set file path for t
75+
trees.push(tree);
76+
}
77+
});
78+
};
79+
if (fs.lstatSync(pathInput).isDirectory()) {
80+
processDirectory(pathInput);
81+
}
82+
else if (path_1.default.extname(pathInput) === '.js') {
83+
// Read a single JavaScript file
84+
const code = fs.readFileSync(pathInput, 'utf-8');
85+
let tree = parser.parse(code);
86+
tree.rootNode.path = pathInput; // Set file path for t
87+
trees.push(tree);
88+
}
89+
resolve({ event: 'GetJsTreeResponse', payload: trees }); // Return an array of abstract syntax trees (ASTs)
90+
}
91+
catch (error) {
92+
console.error('An error occurred:', error);
93+
return { event: 'GetJsTreeResponse', payload: null }; // Return null in case of error
94+
}
2995
}
3096
});
3197
});
98+
// return new Promise(async (resolve, reject) => {
99+
// cbws.getWebsocket.send(JSON.stringify({
100+
// "type": "codeEvent",
101+
// "action": "getJsTree",
102+
// payload: {
103+
// filePath
104+
// }
105+
// }));
106+
// cbws.getWebsocket.on('message', (data: string) => {
107+
// const response = JSON.parse(data);
108+
// if (response.type === "getJsTreeResponse") {
109+
// resolve(response); // Resolve the Promise with the response data
110+
// }
111+
// });
112+
// });
32113
},
33114
/**
34115
* Retrieves all files as Markdown.

package-lock.json

Lines changed: 43 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@codebolt/codeboltjs",
3-
"version": "1.1.78",
3+
"version": "1.1.79",
44
"description": "",
55
"keywords": [],
66
"author": "",
@@ -20,6 +20,8 @@
2020
"dependencies": {
2121
"@codebolt/types": "^1.0.10",
2222
"js-yaml": "^4.1.0",
23+
"tree-sitter": "^0.22.4",
24+
"tree-sitter-javascript": "^0.23.1",
2325
"typedoc-plugin-missing-exports": "^2.2.0",
2426
"ws": "^8.17.0"
2527
},
@@ -40,4 +42,4 @@
4042
"jest": {
4143
"testTimeout": 50000
4244
}
43-
}
45+
}

src/modules/codeutils.ts

Lines changed: 68 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import cbws from './websocket';
22
import * as fs from 'fs';
33
import path from 'path';
4-
// import Parser from 'tree-sitter';
5-
// import JavaScript from 'tree-sitter-javascript';
4+
import Parser from 'tree-sitter';
5+
import JavaScript from 'tree-sitter-javascript';
66

77
import { GetJsTreeResponse, MatchProblemResponse, GetMatcherListTreeResponse, getMatchDetail } from '@codebolt/types';
88

@@ -17,21 +17,79 @@ const cbcodeutils = {
1717
* @returns {Promise<GetJsTreeResponse>} A promise that resolves with the JS tree response.
1818
*/
1919
getJsTree: (filePath?: string) => {
20-
return new Promise(async (resolve, reject) => {
20+
return new Promise( async (resolve, reject) => {
2121
cbws.getWebsocket.send(JSON.stringify({
22-
"type": "codeEvent",
23-
"action": "getJsTree",
24-
payload: {
25-
filePath
26-
}
22+
"type": "settingEvent",
23+
"action": "getProjectPath"
2724
}));
2825
cbws.getWebsocket.on('message', (data: string) => {
2926
const response = JSON.parse(data);
30-
if (response.type === "getJsTreeResponse") {
31-
resolve(response); // Resolve the Promise with the response data
27+
if (response.type === "getProjectPathResponse") {
28+
// resolve(response);
29+
try {
30+
let pathInput= response.projectPath;
31+
let parser= new Parser();
32+
// Initialize the parser with the JavaScript language
33+
parser.setLanguage(JavaScript as unknown as Parser.Language);
34+
const trees = [];
35+
const functionNodes = [];
36+
37+
const processDirectory = (directory:any) => {
38+
console.log("isdir")
39+
// Read all files in the directory
40+
const files = fs.readdirSync(directory, { withFileTypes: true });
41+
42+
files.forEach(file => {
43+
if (file.isDirectory()) {
44+
if (file.name !== 'node_modules') { // Ignore node_modules directory
45+
processDirectory(path.join(directory, file.name)); // Recursive call for subdirectories
46+
}
47+
} else if (path.extname(file.name) === '.js') {
48+
const code = fs.readFileSync(path.join(directory, file.name), 'utf-8');
49+
console.log(code);
50+
let tree:any = parser.parse(code);
51+
tree.rootNode.path = path.join(directory, file.name); // Set file path for t
52+
trees.push(tree);
53+
}
54+
});
55+
};
56+
57+
if (fs.lstatSync(pathInput).isDirectory()) {
58+
processDirectory(pathInput);
59+
} else if (path.extname(pathInput) === '.js') {
60+
// Read a single JavaScript file
61+
const code = fs.readFileSync(pathInput, 'utf-8');
62+
let tree:any = parser.parse(code);
63+
tree.rootNode.path = pathInput; // Set file path for t
64+
65+
trees.push(tree);
66+
}
67+
68+
resolve({ event: 'GetJsTreeResponse',payload:trees}); // Return an array of abstract syntax trees (ASTs)
69+
} catch (error) {
70+
console.error('An error occurred:', error);
71+
return { event: 'GetJsTreeResponse',payload:null}; // Return null in case of error
72+
}
3273
}
3374
});
75+
76+
3477
});
78+
// return new Promise(async (resolve, reject) => {
79+
// cbws.getWebsocket.send(JSON.stringify({
80+
// "type": "codeEvent",
81+
// "action": "getJsTree",
82+
// payload: {
83+
// filePath
84+
// }
85+
// }));
86+
// cbws.getWebsocket.on('message', (data: string) => {
87+
// const response = JSON.parse(data);
88+
// if (response.type === "getJsTreeResponse") {
89+
// resolve(response); // Resolve the Promise with the response data
90+
// }
91+
// });
92+
// });
3593
},
3694

3795
/**

0 commit comments

Comments
 (0)