'use strict' ; import { MarkedString , CompletionItemKind , CompletionItem } from 'vscode-languageserver' ; import Strings = require ( '../utils/strings' ) ; import { JSONWorkerContribution , JSONPath , CompletionsCollector } from 'vscode-json-languageservice' ; import * as nls from 'vscode-nls' ; const localize = nls . loadMessageBundle ( ) ; let globProperties = [ { kind : CompletionItemKind . Value , label : localize ( 'fileLabel' , "Files by Extension" ) , insertText : '"**/*.{{extension}}": true' , documentation : localize ( 'fileDescription' , "Match all files of a specific file extension." ) } , { kind : CompletionItemKind . Value , label : localize ( 'filesLabel' , "Files with Multiple Extensions" ) , insertText : '"**/*.{ext1,ext2,ext3}": true' , documentation : localize ( 'filesDescription' , "Match all files with any of the file extensions." ) } , { kind : CompletionItemKind . Value , label : localize ( 'derivedLabel' , "Files with Siblings by Name" ) , insertText : '"**/*.{{source-extension}}": { "when": "$(basename).{{target-extension}}" }' , documentation : localize ( 'derivedDescription' , "Match files that have siblings with the same name but a different extension." ) } , { kind : CompletionItemKind . Value , label : localize ( 'topFolderLabel' , "Folder by Name (Top Level)" ) , insertText : '"{{name}}": true' , documentation : localize ( 'topFolderDescription' , "Match a top level folder with a specific name." ) } , { kind : CompletionItemKind . Value , label : localize ( 'topFoldersLabel' , "Folders with Multiple Names (Top Level)" ) , insertText : '"{folder1,folder2,folder3}": true' , documentation : localize ( 'topFoldersDescription' , "Match multiple top level folders." ) } , { kind : CompletionItemKind . Value , label : localize ( 'folderLabel' , "Folder by Name (Any Location)" ) , insertText : '"**/{{name}}": true' , documentation : localize ( 'folderDescription' , "Match a folder with a specific name in any location." ) } , ] ; let globValues = [ { kind : CompletionItemKind . Value , label : localize ( 'trueLabel' , "true" ) , insertText : 'true' , documentation : localize ( 'trueDescription' , "Enable the pattern." ) } , { kind : CompletionItemKind . Value , label : localize ( 'falseLabel' , "false" ) , insertText : 'false' , documentation : localize ( 'falseDescription' , "Disable the pattern." ) } , { kind : CompletionItemKind . Value , label : localize ( 'derivedLabel' , "Files with Siblings by Name" ) , insertText : '{ "when": "$(basename).{{extension}}" }' , documentation : localize ( 'siblingsDescription' , "Match files that have siblings with the same name but a different extension." ) } ] ; export class GlobPatternContribution implements JSONWorkerContribution { constructor ( ) { } private isSettingsFile ( resource ) { return Strings . endsWith ( resource , '/settings.json' ) ; } public collectDefaultCompletions ( resource , result ) { return null ; } public collectPropertyCompletions ( resource , location , currentWord , addValue , isLast , result ) { if ( this . isSettingsFile ( resource ) && location . length === 1 && ( ( location [ 0 ] === 'files.exclude' ) || ( location [ 0 ] === 'search.exclude' ) ) ) { globProperties . forEach ( e => { e . filterText = e . insertText ; result . add ( e ) ; } ) ; } return null ; } public collectValueCompletions ( resource , location , currentKey , result ) { if ( this . isSettingsFile ( resource ) && location . length === 1 && ( ( location [ 0 ] === 'files.exclude' ) || ( location [ 0 ] === 'search.exclude' ) ) ) { globValues . forEach ( e => { e . filterText = e . insertText ; result . add ( e ) ; } ) ; } return null ; } public getInfoContribution ( resource , location ) { return null ; } }