This commit is contained in:
168
node_modules/vscode-css-languageservice/lib/umd/services/cssHover.js
generated
vendored
168
node_modules/vscode-css-languageservice/lib/umd/services/cssHover.js
generated
vendored
@@ -1,168 +0,0 @@
|
||||
(function (factory) {
|
||||
if (typeof module === "object" && typeof module.exports === "object") {
|
||||
var v = factory(require, exports);
|
||||
if (v !== undefined) module.exports = v;
|
||||
}
|
||||
else if (typeof define === "function" && define.amd) {
|
||||
define(["require", "exports", "../parser/cssNodes", "../languageFacts/facts", "./selectorPrinting", "../utils/strings", "../cssLanguageTypes", "../utils/objects"], factory);
|
||||
}
|
||||
})(function (require, exports) {
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.CSSHover = void 0;
|
||||
const nodes = require("../parser/cssNodes");
|
||||
const languageFacts = require("../languageFacts/facts");
|
||||
const selectorPrinting_1 = require("./selectorPrinting");
|
||||
const strings_1 = require("../utils/strings");
|
||||
const cssLanguageTypes_1 = require("../cssLanguageTypes");
|
||||
const objects_1 = require("../utils/objects");
|
||||
class CSSHover {
|
||||
constructor(clientCapabilities, cssDataManager) {
|
||||
this.clientCapabilities = clientCapabilities;
|
||||
this.cssDataManager = cssDataManager;
|
||||
this.selectorPrinting = new selectorPrinting_1.SelectorPrinting(cssDataManager);
|
||||
}
|
||||
configure(settings) {
|
||||
this.defaultSettings = settings;
|
||||
}
|
||||
doHover(document, position, stylesheet, settings = this.defaultSettings) {
|
||||
function getRange(node) {
|
||||
return cssLanguageTypes_1.Range.create(document.positionAt(node.offset), document.positionAt(node.end));
|
||||
}
|
||||
const offset = document.offsetAt(position);
|
||||
const nodepath = nodes.getNodePath(stylesheet, offset);
|
||||
/**
|
||||
* nodepath is top-down
|
||||
* Build up the hover by appending inner node's information
|
||||
*/
|
||||
let hover = null;
|
||||
let flagOpts;
|
||||
for (let i = 0; i < nodepath.length; i++) {
|
||||
const node = nodepath[i];
|
||||
if (node instanceof nodes.Media) {
|
||||
const regex = /@media[^\{]+/g;
|
||||
const matches = node.getText().match(regex);
|
||||
flagOpts = {
|
||||
isMedia: true,
|
||||
text: matches?.[0],
|
||||
};
|
||||
}
|
||||
if (node instanceof nodes.Selector) {
|
||||
hover = {
|
||||
contents: this.selectorPrinting.selectorToMarkedString(node, flagOpts),
|
||||
range: getRange(node),
|
||||
};
|
||||
break;
|
||||
}
|
||||
if (node instanceof nodes.SimpleSelector) {
|
||||
/**
|
||||
* Some sass specific at rules such as `@at-root` are parsed as `SimpleSelector`
|
||||
*/
|
||||
if (!(0, strings_1.startsWith)(node.getText(), '@')) {
|
||||
hover = {
|
||||
contents: this.selectorPrinting.simpleSelectorToMarkedString(node),
|
||||
range: getRange(node),
|
||||
};
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (node instanceof nodes.Declaration) {
|
||||
const propertyName = node.getFullPropertyName();
|
||||
const entry = this.cssDataManager.getProperty(propertyName);
|
||||
if (entry) {
|
||||
const contents = languageFacts.getEntryDescription(entry, this.doesSupportMarkdown(), settings);
|
||||
if (contents) {
|
||||
hover = {
|
||||
contents,
|
||||
range: getRange(node),
|
||||
};
|
||||
}
|
||||
else {
|
||||
hover = null;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (node instanceof nodes.UnknownAtRule) {
|
||||
const atRuleName = node.getText();
|
||||
const entry = this.cssDataManager.getAtDirective(atRuleName);
|
||||
if (entry) {
|
||||
const contents = languageFacts.getEntryDescription(entry, this.doesSupportMarkdown(), settings);
|
||||
if (contents) {
|
||||
hover = {
|
||||
contents,
|
||||
range: getRange(node),
|
||||
};
|
||||
}
|
||||
else {
|
||||
hover = null;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (node instanceof nodes.Node && node.type === nodes.NodeType.PseudoSelector) {
|
||||
const selectorName = node.getText();
|
||||
const entry = selectorName.slice(0, 2) === '::' ? this.cssDataManager.getPseudoElement(selectorName) : this.cssDataManager.getPseudoClass(selectorName);
|
||||
if (entry) {
|
||||
const contents = languageFacts.getEntryDescription(entry, this.doesSupportMarkdown(), settings);
|
||||
if (contents) {
|
||||
hover = {
|
||||
contents,
|
||||
range: getRange(node),
|
||||
};
|
||||
}
|
||||
else {
|
||||
hover = null;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (hover) {
|
||||
hover.contents = this.convertContents(hover.contents);
|
||||
}
|
||||
return hover;
|
||||
}
|
||||
convertContents(contents) {
|
||||
if (!this.doesSupportMarkdown()) {
|
||||
if (typeof contents === 'string') {
|
||||
return contents;
|
||||
}
|
||||
// MarkupContent
|
||||
else if ('kind' in contents) {
|
||||
return {
|
||||
kind: 'plaintext',
|
||||
value: contents.value,
|
||||
};
|
||||
}
|
||||
// MarkedString[]
|
||||
else if (Array.isArray(contents)) {
|
||||
return contents.map((c) => {
|
||||
return typeof c === 'string' ? c : c.value;
|
||||
});
|
||||
}
|
||||
// MarkedString
|
||||
else {
|
||||
return contents.value;
|
||||
}
|
||||
}
|
||||
return contents;
|
||||
}
|
||||
doesSupportMarkdown() {
|
||||
if (!(0, objects_1.isDefined)(this.supportsMarkdown)) {
|
||||
if (!(0, objects_1.isDefined)(this.clientCapabilities)) {
|
||||
this.supportsMarkdown = true;
|
||||
return this.supportsMarkdown;
|
||||
}
|
||||
const hover = this.clientCapabilities.textDocument && this.clientCapabilities.textDocument.hover;
|
||||
this.supportsMarkdown = hover && hover.contentFormat && Array.isArray(hover.contentFormat) && hover.contentFormat.indexOf(cssLanguageTypes_1.MarkupKind.Markdown) !== -1;
|
||||
}
|
||||
return this.supportsMarkdown;
|
||||
}
|
||||
}
|
||||
exports.CSSHover = CSSHover;
|
||||
});
|
||||
Reference in New Issue
Block a user