cuốn sách gpt4 ai đã làm

Sử dụng quy tắc tùy chỉnh cho JavaScript để phân tích tĩnh?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 20:37:06 28 4
mua khóa gpt4 Nike

JSLint, JSHint hoặc một số công cụ phân tích mã tĩnh nguồn mở khác có hỗ trợ thêm các quy tắc tùy chỉnh để tuân thủ mã hay có một số trình phân tích cú pháp tuân thủ ECMAScript mà tôi có thể sử dụng để nhận được kết quả gần nhất có thể với những gì tôi thấy trong Kết quả của đoạn mã bên dưới ?

Ví dụ: tôi muốn xem mã JavaScript và liệt kê các hàm được gọi và nếu nó gọi một thư viện (hoặc API do điện thoại thông minh cung cấp cho các tiện ích HTML5) để đăng ký mọi thứ trong không gian tên API đó, hãy tạo một cây đối tượng và các đối tượng của chúng. Properties , để xem liệu hàm có được gọi từ một đối tượng có thể truy nguyên hay không, có thể sử dụng kết quả đầu ra ở dạng XML, JSON hoặc các định dạng có cấu trúc khác.

Ví dụ: tôi có mã JavaScript này (nó không làm gì cả, chỉ để tranh luận):

công việc = mylibrary.getJobs();
đã tìm thấy = jobs.find("Python");
list = Found.convert("html");

Tôi muốn công cụ phân tích của tôi có được điều này:

{
"thư viện của tôi": {
"việc làm": {"maker:"getJobs", "parent": "mylibrary"},
"found": {"maker": "find", "parent": "jobs", "parameters": "Python"},
"list": {"maker": "chuyển đổi", "cha mẹ": "đã tìm thấy"}
}
}

câu trả lời hay nhất

Bạn sẽ có thể sử dụng substack's bánh burrito Xây dựng một cái gì đó như thế này, sử dụng làm xấu đi-JS phân tích cú pháp và tôi nghĩ là cung cấp mọi thứ bạn cần. Ví dụ nhanh:

src.js:

công việc var, tìm thấy, danh sách;
công việc = mylibrary.getJobs();
đã tìm thấy = jobs.find("Python");
list = Found.convert("html");

ast.js:

var fs = require('fs'),
burrito = require('burrito');

var src = fs.readFileSync('./src.js', 'utf8');

burrito(src, hàm (nút) {
console.log(node.name, node.value);
});

Tôi không chắc chắn về việc xây dựng cấu trúc mà bạn đang yêu cầu như thế nào (bản thân tôi không thành thạo lắm trong việc phân tích cú pháp AST), nhưng tôi chắc chắn rằng nó sẽ đòi hỏi một số nỗ lực từ phía bạn. Có thể nói, có thể bạn không cần cấu trúc ở giữa mà chỉ cần xác minh từng nút trong bánh burrito, trong đó mỗi nút gọi Tất cả các nút sẽ được xác thực theo các giá trị của chúng (tên hàm, tên đối tượng, v.v.) và cảnh báo sẽ được đưa ra nếu xác thực không được thông qua.

Đây là đỉnh cao bánh burrito Đầu ra của cuộc gọi (lưu ý: mỗi [Sự vật] v.v. đều là node.js console.log< chop. Các giá trị thực sự là các nút trong cây phân tích cú pháp từ burrito, vì vậy mỗi giá trị có trạng thái liên quan, v.v.).

var [ [ [ 'việc làm' ], [ 'tìm thấy' ], [ 'danh sách'] ] ]
chỉ số [ [ { tên: 'gán', bắt đầu: [Đối tượng], kết thúc: [Đối tượng] },
ĐÚNG VẬY,
[ [Đối tượng], 'việc làm' ],
[ [Đối tượng], [Đối tượng], [] ] ] ]
gán [đúng,
[ { name: 'name', start: [Object], end: [Object] }, 'jobs' ],
[ { tên: 'gọi', bắt đầu: [Đối tượng], kết thúc: [Đối tượng] },
[ 'dấu chấm', [Đối tượng], 'getJobs' ],
[] ] ]
tên['việc làm']
gọi [ [ 'dấu chấm', [ 'tên', 'mylibrary'], 'getJobs' ], [] ]
chỉ số [ [ { tên: 'gán', bắt đầu: [Đối tượng], kết thúc: [Đối tượng] },
ĐÚNG VẬY,
[ [Đối tượng], 'tìm thấy'],
[ [Đối tượng], [Đối tượng], [Đối tượng] ] ] ]
gán [đúng,
[ { tên: 'tên', bắt đầu: [Đối tượng], kết thúc: [Đối tượng] }, 'tìm thấy' ],
[ { tên: 'gọi', bắt đầu: [Đối tượng], kết thúc: [Đối tượng] },
[ 'chấm', [Đối tượng], 'tìm'],
[ [Sự vật] ] ] ]
tên['tìm thấy']
gọi [ [ 'chấm', [ 'tên', 'việc làm' ], 'tìm'],
[ [ [Đối tượng], 'Python' ] ] ]
chuỗi['Python']
chỉ số [ [ { tên: 'gán', bắt đầu: [Đối tượng], kết thúc: [Đối tượng] },
ĐÚNG VẬY,
[ [Đối tượng], 'danh sách'],
[ [Đối tượng], [Đối tượng], [Đối tượng] ] ] ]
gán [đúng,
[ { tên: 'tên', bắt đầu: [Đối tượng], kết thúc: [Đối tượng] }, 'danh sách' ],
[ { tên: 'gọi', bắt đầu: [Đối tượng], kết thúc: [Đối tượng] },
[ 'dấu chấm', [Đối tượng], 'chuyển đổi'],
[ [Sự vật] ] ] ]
tên['danh sách']
gọi [ [ 'dấu chấm', [ 'tên', 'tìm thấy' ], 'chuyển đổi'],
[ [ [Đối tượng], 'html' ] ] ]
chuỗi['html']

gia hạn:

Một tùy chọn khác là trình phân tích cú pháp ES mới hơn (?) Esprima , dường như được phát triển tích cực hơn và được ghi chép tốt hơn. Nó cũng được cho là nhanh hơn Uglify. Bạn có thể thử ví dụ: trong Trang Demo phân tích cú pháp được phân tích ở trên. Theo tôi, bạn sẽ có thể xây dựng một giải pháp tốt bằng cách sử dụng nó.

Về javascript - Sử dụng quy tắc tùy chỉnh cho JavaScript để phân tích tĩnh? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11816713/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress