2016-08-10 25 views
15

Tôi đang cố gắng tự động hoàn thành tệp js bằng cách sử dụng nodejs và tern. Ternjs có tài liệu tồi tệ nhất mà tôi từng thấy.Ternjs cho nodejs tự động hoàn thành

var tern = require("tern") 

var ternServer = new tern.Server({}) 

var requestDetails = { 
     "query": { 
      "type": "completions", 
      "file": "myfile.js", 
      "end": {"line":0,"ch":3}, 
      "types":true, 
      "includeKeywords":true, 
      "sort":true, 
      "guess":true, 
      "docs":true, 
      "urls":true, 
      "origins":true, 
      "lineCharPositions":true, 
      "caseInsensitive":true 
     }, 
     "files": [ 
      { 
       "type": "full", 
       "name": "myfile.js", 
       "text": 'req' 
      } 
     ] 
} 

ternServer.request(requestDetails, function(error, success){ 
    console.log(success); 
}); 

Nó không hoạt động mặc dù nếu tôi sử dụng con nó được cung cấp tiếp tục và const. Nhưng không phải sau đó. Trong khi trong plugin atom nó cung cấp yêu cầu tự động hoàn thành module. Tui bỏ lỡ điều gì vậy.

Ngoài ra đây là tập tin .tern dự án

{ 
    "ecmaVersion": 6, 
    "libs": [ 
    "browser", 
    "jquery", 
    "requirejs", 
    "commonjs" 
    ], 
    "plugins": { 
    "complete_strings": { 
     "maxLength": 15 
    }, 
    "node": {}, 
    "lint": {}, 
    "doc_comment": { 
     "fullDocs": true, 
     "strong": true 
    } 
    } 
} 
+0

giá trị thêm xử lý lỗi. console.log (lỗi) ;. Nó có thể cung cấp cho bạn một đầu mối cho những gì không thành công. – omer727

Trả lời

3

Các thư viện autocomplete không được nạp khi bạn khởi động máy chủ theo cách này. Chỉ cần xác định chúng trong tệp .tern_project dường như không hoạt động.

Nếu bạn khởi động máy chủ bằng cách sử dụng node_modules/tern/bin/tern, bạn sẽ nhận được một cổng, sau đó bạn có thể POST thành công yêu cầu và nhận được hoàn thành theo cách đó.

curl -H "Content-Type:e": "completions","file": "myfile.js","end": {"line":0,"ch":3},"types":true,"includeKeywords":true,"sort":true,"guess":true,"docs":true,"urls":true,"origins":true,"lineCharPositions":true,"caseInsensitive":true},"files": [{"type": "full","name": "myfile.js","text": "req"}]}' http://localhost:[PORT] 

Nếu điều đó không hiệu quả với bạn, bạn có thể thêm thủ công các tệp def như vậy.

var tern = require("tern"); 
var fs = require("fs"); 

var ternServer = new tern.Server({ "async": true, "defs": findDefs()}) 
var requestDetails = { 
    "query": { 
     "type": "completions", 
     "file": "myfile.js", 
     "end": { "line": 0, "ch": 3 }, 
     "types": true, 
     "includeKeywords": true, 
     "sort": true, 
     "guess": true, 
     "docs": true, 
     "urls": true, 
     "origins": true, 
     "lineCharPositions": true, 
     "caseInsensitive": true, 
    }, 
    "files": [{ 
     "type": "full", 
     "name": "myfile.js", 
     "text": 'req' 
    }] 
} 

ternServer.request(requestDetails, function(error, success) { 
    console.log(success); 
}); 

function findDefs() { 
    var defs = []; 
    defs.push(JSON.parse(fs.readFileSync("node_modules/tern/defs/ecmascript.json", "utf8"))); 
    defs.push(JSON.parse(fs.readFileSync("node_modules/tern/defs/browser.json", "utf8"))); 
    defs.push(JSON.parse(fs.readFileSync("node_modules/tern/defs/jquery.json", "utf8"))); 
    defs.push(JSON.parse(fs.readFileSync("node_modules/tern/defs/underscore.json", "utf8"))); 
    return defs; 
} 
Các vấn đề liên quan