alm
Version:
The best IDE for TypeScript
88 lines (86 loc) • 3.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Had a look at https://github.com/Microsoft/vscode/blob/6e8f6596175fda10b69ee9ba33caf45b5ad7e579/extensions/javascript/src/features/packageJSONContribution.ts#L206
*
* To figure out how to get this.
*
* Basically the `jsonc-parser` is really handy:
*
* ```ts
* const doc = Parser.parse(contents);
* let node = doc.getNodeFromOffsetEndInclusive(offset);
* let location = node.getNodeLocation();
* ```
* Both `node` and `location` are extremely handy
*
* Also validation:
*
```ts
const doc = Parser.parse(contents);
// TODO: validation :)
if (!doc.errors.length) {
doc.validate(schema);
// console.log('Schema Validation:',doc.errors,doc.warnings);
}
else {
// console.log('Parse Errors:', doc.errors);
}
```
*
*/
var Parser = require("./core/jsonParser");
var packageJsonDependenciesSections = [
'dependencies',
'devDependencies',
'optionalDependencies',
'peerDependencies',
];
var utils = require("../../../../common/utils");
var socketClient_1 = require("../../../../socket/socketClient");
var ProvideHover = /** @class */ (function () {
function ProvideHover() {
}
ProvideHover.prototype.provideHover = function (model, pos, token) {
var wordInfo = model.getWordUntilPosition(pos);
var response = {
range: {
startLineNumber: pos.lineNumber,
endLineNumber: pos.lineNumber,
startColumn: wordInfo.startColumn,
endColumn: wordInfo.endColumn,
},
contents: [],
};
var filePath = model.filePath;
var fileName = utils.getFileName(filePath).toLowerCase();
var offset = model.getOffsetAt(pos);
var contents = model.getValue();
var doc = Parser.parse(contents);
var node = doc.getNodeFromOffsetEndInclusive(offset);
var location = node.getNodeLocation();
/**
* Provide intelligence based on file name
*/
if (fileName === "package.json") {
/** Provide latest version hint for depencencies */
if (packageJsonDependenciesSections.some(function (section) { return location.matches([section, '*']); })) {
var path = location.getSegments(); // e.g. ["devDependencies", "mocha"]
var pack = path[path.length - 1];
if (typeof pack === 'string') {
return socketClient_1.server.npmLatest({ pack: pack }).then(function (res) {
// console.log(res);
if (!res.description && !res.version)
return response;
res.description && response.contents.push("**" + res.description + "**");
res.version && response.contents.push("Latest version: " + res.version);
return response;
});
}
}
}
return utils.resolve(response);
};
return ProvideHover;
}());
exports.ProvideHover = ProvideHover;