UNPKG

alm

Version:

The best IDE for TypeScript

88 lines (86 loc) 3.13 kB
"use strict"; 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;