@@ -20,7 +20,7 @@ import { kebabCase } from 'lodash';
2020import { Configuration } from './configuration' ;
2121import { ConfigurationMenu } from './configurationMenu' ;
2222import { LaunchDarklyAPI } from './api' ;
23- import { Environment , FlagConfiguration } from './models' ;
23+ import { Environment , Flag , FlagConfiguration } from './models' ;
2424import { FlagStore } from './flagStore' ;
2525
2626const STRING_DELIMETERS = [ '"' , "'" , '`' ] ;
@@ -80,13 +80,13 @@ export function register(ctx: ExtensionContext, config: Configuration, flagStore
8080 }
8181
8282 try {
83- await openFlagInBrowser ( config , flagKey , api ) ;
83+ await openFlagInBrowser ( config , flagKey , flagStore ) ;
8484 } catch ( err ) {
8585 let errMsg = `Encountered an unexpected error retrieving the flag ${ flagKey } ` ;
8686 if ( err . statusCode == 404 ) {
8787 // Try resolving the flag key to kebab case
8888 try {
89- await openFlagInBrowser ( config , kebabCase ( flagKey ) , api ) ;
89+ await openFlagInBrowser ( config , kebabCase ( flagKey ) , flagStore ) ;
9090 return ;
9191 } catch ( err ) {
9292 if ( err . statusCode == 404 ) {
@@ -113,13 +113,18 @@ class LaunchDarklyHoverProvider implements HoverProvider {
113113 public provideHover ( document : TextDocument , position : Position ) : Thenable < Hover > {
114114 return new Promise ( async ( resolve , reject ) => {
115115 if ( this . config . enableHover ) {
116- const flags = await this . flagStore . allFlags ( ) ;
117116 let candidate = document . getText ( document . getWordRangeAtPosition ( position , FLAG_KEY_REGEX ) ) ;
118- let flag = flags [ candidate ] || flags [ kebabCase ( candidate ) ] ;
119- if ( flag ) {
120- let hover = generateHoverString ( flag ) ;
121- resolve ( new Hover ( hover ) ) ;
122- return ;
117+ try {
118+ let data =
119+ ( await this . flagStore . getFeatureFlag ( candidate ) ) ||
120+ ( await this . flagStore . getFeatureFlag ( kebabCase ( candidate ) ) ) ;
121+ if ( data ) {
122+ let hover = generateHoverString ( data . flag , data . config ) ;
123+ resolve ( new Hover ( hover ) ) ;
124+ return ;
125+ }
126+ } catch ( e ) {
127+ reject ( e ) ;
123128 }
124129 }
125130 reject ( ) ;
@@ -154,8 +159,8 @@ class LaunchDarklyCompletionItemProvider implements CompletionItemProvider {
154159 }
155160}
156161
157- const openFlagInBrowser = async ( config : Configuration , flagKey : string , api : LaunchDarklyAPI ) => {
158- const flag = await api . getFeatureFlag ( config . project , flagKey , config . env ) ;
162+ const openFlagInBrowser = async ( config : Configuration , flagKey : string , flagStore : FlagStore ) => {
163+ const { flag } = await flagStore . getFeatureFlag ( flagKey ) ;
159164
160165 // Default to first environment
161166 let env : Environment = Object . values ( flag . environments ) [ 0 ] ;
@@ -174,19 +179,20 @@ const openFlagInBrowser = async (config: Configuration, flagKey: string, api: La
174179 opn ( url . resolve ( config . baseUri , sitePath ) ) ;
175180} ;
176181
177- export function generateHoverString ( flag : FlagConfiguration ) {
182+ export function generateHoverString ( flag : Flag , c : FlagConfiguration ) {
178183 return `**LaunchDarkly feature flag**\n
179- Key: ${ flag . key }
180- Enabled: ${ flag . on }
181- Default variation: ${ JSON . stringify ( flag . variations [ flag . fallthrough . variation ] ) }
182- Off variation: ${ JSON . stringify ( flag . variations [ flag . offVariation ] ) }
183- ${ plural ( flag . prerequisites . length , 'prerequisite' , 'prerequisites' ) }
184+ Name: ${ flag . name }
185+ Key: ${ c . key }
186+ Enabled: ${ c . on }
187+ Default variation: ${ JSON . stringify ( c . variations [ c . fallthrough . variation ] ) }
188+ Off variation: ${ JSON . stringify ( c . variations [ c . offVariation ] ) }
189+ ${ plural ( c . prerequisites . length , 'prerequisite' , 'prerequisites' ) }
184190 ${ plural (
185- flag . targets . reduce ( ( acc , curr ) => acc + curr . values . length , 0 ) ,
191+ c . targets . reduce ( ( acc , curr ) => acc + curr . values . length , 0 ) ,
186192 'user target' ,
187193 'user targets' ,
188194 ) }
189- ${ plural ( flag . rules . length , 'rule' , 'rules' ) } ` ;
195+ ${ plural ( c . rules . length , 'rule' , 'rules' ) } ` ;
190196}
191197
192198function plural ( count : number , singular : string , plural : string ) {
0 commit comments