@@ -22,29 +22,28 @@ async function populatePackageNodes(): Promise<void> {
2222 }
2323}
2424
25- function getPackageNode ( name : string ) : PackageNode {
25+ function getPackageNode ( name : string ) : PackageNode | undefined {
2626 const rootNode = globalRHelp ?. treeViewWrapper . helpViewProvider . rootItem ;
2727 if ( rootNode ) {
2828 return rootNode . pkgRootNode . children ?. find ( node => node . label === name ) ;
2929 }
3030}
3131
3232export class WorkspaceDataProvider implements TreeDataProvider < TreeItem > {
33+ private readonly attachedNamespacesRootItem : TreeItem ;
34+ private readonly loadedNamespacesRootItem : TreeItem ;
35+ private readonly globalEnvRootItem : TreeItem ;
3336 private _onDidChangeTreeData : EventEmitter < void > = new EventEmitter ( ) ;
34- readonly onDidChangeTreeData : Event < void > = this . _onDidChangeTreeData . event ;
3537
36- refresh ( ) : void {
38+ public readonly onDidChangeTreeData : Event < void > = this . _onDidChangeTreeData . event ;
39+ public data : WorkspaceData ;
40+
41+ public refresh ( ) : void {
3742 this . data = isGuestSession ? guestWorkspace : workspaceData ;
3843 this . _onDidChangeTreeData . fire ( ) ;
3944 }
4045
41- data : WorkspaceData ;
42-
43- private readonly attachedNamespacesRootItem : TreeItem ;
44- private readonly loadedNamespacesRootItem : TreeItem ;
45- private readonly globalEnvRootItem : TreeItem ;
46-
47- constructor ( ) {
46+ public constructor ( ) {
4847 this . attachedNamespacesRootItem = new TreeItem ( 'Attached Namespaces' , TreeItemCollapsibleState . Collapsed ) ;
4948 this . attachedNamespacesRootItem . id = 'attached-namespaces' ;
5049 this . attachedNamespacesRootItem . iconPath = new ThemeIcon ( 'library' ) ;
@@ -64,11 +63,11 @@ export class WorkspaceDataProvider implements TreeDataProvider<TreeItem> {
6463 ) ;
6564 }
6665
67- getTreeItem ( element : TreeItem ) : TreeItem {
66+ public getTreeItem ( element : TreeItem ) : TreeItem {
6867 return element ;
6968 }
7069
71- async getChildren ( element ?: TreeItem ) : Promise < TreeItem [ ] > {
70+ public async getChildren ( element ?: TreeItem ) : Promise < TreeItem [ ] > {
7271 if ( element ) {
7372 if ( this . data === undefined ) {
7473 return [ ] ;
@@ -141,7 +140,7 @@ export class WorkspaceDataProvider implements TreeDataProvider<TreeItem> {
141140 str ,
142141 type ,
143142 size ,
144- 0 ,
143+ TreeLevel . Parent ,
145144 dim ,
146145 ) ;
147146 } ;
@@ -162,7 +161,7 @@ export class WorkspaceDataProvider implements TreeDataProvider<TreeItem> {
162161 } else if ( a . priority < b . priority ) {
163162 return 1 ;
164163 } else {
165- return 0 || a . label . localeCompare ( b . label ) ;
164+ return a . label . localeCompare ( b . label ) ;
166165 }
167166 }
168167
@@ -171,11 +170,11 @@ export class WorkspaceDataProvider implements TreeDataProvider<TreeItem> {
171170}
172171
173172class PackageItem extends TreeItem {
174- static command : string = 'r.workspaceViewer.package.showQuickPick' ;
175- label : string ;
176- name : string ;
177- pkgNode ?: PackageNode ;
178- constructor ( label : string , name : string , pkgNode ?: PackageNode ) {
173+ public static command : string = 'r.workspaceViewer.package.showQuickPick' ;
174+ public label : string ;
175+ public name : string ;
176+ public pkgNode ?: PackageNode ;
177+ public constructor ( label : string , name : string , pkgNode ?: PackageNode ) {
179178 super ( label , TreeItemCollapsibleState . None ) ;
180179 this . name = name ;
181180 this . iconPath = new ThemeIcon ( 'symbol-package' ) ;
@@ -191,33 +190,48 @@ class PackageItem extends TreeItem {
191190 }
192191}
193192
193+ enum TreeLevel {
194+ Parent = 0 ,
195+ Scalar = 1 ,
196+ Child = 2
197+ }
198+
194199export class GlobalEnvItem extends TreeItem {
195- label : string ;
196- desc : string ;
197- str : string ;
198- type : string ;
199- treeLevel : number ;
200- contextValue : string ;
201- priority : number ;
200+ public label : string ;
201+ public desc : string ;
202+ public str : string ;
203+ public type : string ;
204+ public treeLevel : number ;
205+ public contextValue : string ;
206+ public priority : number ;
202207
203208 constructor (
204209 label : string ,
205210 rClass : string ,
206211 str : string ,
207212 type : string ,
208- size : number ,
209- treeLevel : number ,
213+ size ? : number ,
214+ treeLevel ? : number ,
210215 dim ?: number [ ] ,
211216 ) {
212- super ( label , GlobalEnvItem . setCollapsibleState ( treeLevel , type , str ) ) ;
213- this . description = this . getDescription ( dim , str , rClass , type ) ;
214- this . tooltip = this . getTooltip ( label , rClass , size , treeLevel ) ;
215- this . iconPath = this . getIcon ( type , dim ) ;
217+ super (
218+ label ,
219+ GlobalEnvItem . setCollapsibleState ( treeLevel ?? TreeLevel . Scalar , type , str )
220+ ) ;
216221 this . type = type ;
217222 this . str = str ;
218- this . treeLevel = treeLevel ;
219- this . contextValue = treeLevel === 0 ? 'rootNode' : `childNode${ treeLevel } ` ;
223+ this . treeLevel = treeLevel ?? TreeLevel . Scalar ;
220224 this . priority = dim ? 1 : 0 ;
225+
226+ this . description = this . getDescription (
227+ dim ,
228+ str ,
229+ rClass ,
230+ type
231+ ) ;
232+ this . tooltip = this . getTooltip ( label , rClass , size , treeLevel ) ;
233+ this . iconPath = this . getIcon ( type , dim ) ;
234+ this . contextValue = treeLevel === 0 ? 'rootNode' : `childNode${ this . treeLevel } ` ;
221235 }
222236
223237 private getDescription ( dim : number [ ] , str : string , rClass : string , type : string ) : string {
@@ -244,19 +258,19 @@ export class GlobalEnvItem extends TreeItem {
244258 private getTooltip (
245259 label :string ,
246260 rClass : string ,
247- size : number ,
248- treeLevel : number
261+ size ? : number ,
262+ treeLevel ? : number
249263 ) : string {
250- if ( size !== undefined && treeLevel === 0 ) {
264+ if ( size && treeLevel === TreeLevel . Parent ) {
251265 return `${ label } (${ rClass } , ${ this . getSizeString ( size ) } )` ;
252- } else if ( treeLevel === 1 ) {
253- return null ;
266+ } else if ( treeLevel === TreeLevel . Scalar ) {
267+ return '' ;
254268 } else {
255269 return `${ label } (${ rClass } )` ;
256270 }
257271 }
258272
259- private getIcon ( type : string , dim ?: number [ ] ) {
273+ private getIcon ( type : string , dim ?: number [ ] ) : vscode . ThemeIcon {
260274 let name : string ;
261275 if ( dim ) {
262276 name = 'symbol-array' ;
@@ -274,9 +288,8 @@ export class GlobalEnvItem extends TreeItem {
274288 during the super constructor above. I created it to give full control
275289 of what elements can have have 'child' nodes os not. It can be expanded
276290 in the futere for more tree levels.*/
277-
278- private static setCollapsibleState ( treeLevel : number , type : string , str : string ) {
279- if ( treeLevel === 0 && collapsibleTypes . includes ( type ) && str . includes ( '\n' ) ) {
291+ private static setCollapsibleState ( treeLevel : number , type : string , str : string ) : vscode . TreeItemCollapsibleState {
292+ if ( treeLevel === TreeLevel . Parent && collapsibleTypes . includes ( type ) && str . includes ( '\n' ) ) {
280293 return TreeItemCollapsibleState . Collapsed ;
281294 } else {
282295 return TreeItemCollapsibleState . None ;
@@ -285,8 +298,8 @@ export class GlobalEnvItem extends TreeItem {
285298}
286299
287300export function clearWorkspace ( ) : void {
288- const removeHiddenItems : boolean = config ( ) . get ( 'workspaceViewer.removeHiddenItems' ) ;
289- const promptUser : boolean = config ( ) . get ( 'workspaceViewer.clearPrompt' ) ;
301+ const removeHiddenItems : boolean | undefined = config ( ) . get ( 'workspaceViewer.removeHiddenItems' ) ;
302+ const promptUser : boolean | undefined = config ( ) . get ( 'workspaceViewer.clearPrompt' ) ;
290303
291304 if ( ( isGuestSession ? guestWorkspace : workspaceData ) !== undefined ) {
292305 if ( promptUser ) {
@@ -316,7 +329,7 @@ export function clearWorkspace(): void {
316329}
317330
318331export function saveWorkspace ( ) : void {
319- if ( workspaceData !== undefined ) {
332+ if ( workspaceData ) {
320333 void window . showSaveDialog ( {
321334 defaultUri : Uri . file ( path . join ( workingDir , 'workspace.RData' ) ) ,
322335 filters : {
@@ -335,7 +348,7 @@ export function saveWorkspace(): void {
335348}
336349
337350export function loadWorkspace ( ) : void {
338- if ( workspaceData !== undefined ) {
351+ if ( workspaceData ) {
339352 void window . showOpenDialog ( {
340353 defaultUri : Uri . file ( workingDir ) ,
341354 filters : {
0 commit comments