private getPropertyProposals()

in src/services/cssCompletion.ts [209:272]


	private getPropertyProposals(declaration: nodes.Declaration | null, result: CompletionList): CompletionList {
		const triggerPropertyValueCompletion = this.isTriggerPropertyValueCompletionEnabled;
		const completePropertyWithSemicolon = this.isCompletePropertyWithSemicolonEnabled;
		const properties = this.cssDataManager.getProperties();

		properties.forEach(entry => {
			let range: Range;
			let insertText: string;
			let retrigger = false;
			if (declaration) {
				range = this.getCompletionRange(declaration.getProperty());
				insertText = entry.name;
				if (!isDefined(declaration.colonPosition)) {
					insertText += ': ';
					retrigger = true;
				}
			} else {
				range = this.getCompletionRange(null);
				insertText = entry.name + ': ';
				retrigger = true;
			}
			// Empty .selector { | } case
			if (!declaration && completePropertyWithSemicolon) {
				insertText += '$0;';
			}

			// Cases such as .selector { p; } or .selector { p:; }
			if (declaration && !declaration.semicolonPosition) {
				if (completePropertyWithSemicolon && this.offset >= this.textDocument.offsetAt(range.end)) {
					insertText += '$0;';
				}
			}

			const item: CompletionItem = {
				label: entry.name,
				documentation: languageFacts.getEntryDescription(entry, this.doesSupportMarkdown()),
				tags: isDeprecated(entry) ? [CompletionItemTag.Deprecated] : [],
				textEdit: TextEdit.replace(range, insertText),
				insertTextFormat: InsertTextFormat.Snippet,
				kind: CompletionItemKind.Property
			};
			if (!entry.restrictions) {
				retrigger = false;
			}
			if (triggerPropertyValueCompletion && retrigger) {
				item.command = retriggerCommand;
			}
			const relevance = typeof entry.relevance === 'number' ? Math.min(Math.max(entry.relevance, 0), 99) : 50;
			const sortTextSuffix = (255 - relevance).toString(16);
			const sortTextPrefix = strings.startsWith(entry.name, '-') ? SortTexts.VendorPrefixed : SortTexts.Normal;
			item.sortText = sortTextPrefix + '_' + sortTextSuffix;
			result.items.push(item);
		});

		this.completionParticipants.forEach(participant => {
			if (participant.onCssProperty) {
				participant.onCssProperty({
					propertyName: this.currentWord,
					range: this.defaultReplaceRange
				});
			}
		});
		return result;
	}