1
1
import * as vscode from "vscode" ;
2
+ import * as url from "url" ;
2
3
import { DocSearchResult } from "../../api/atelier" ;
3
4
import { AtelierAPI } from "../../api" ;
4
5
@@ -14,32 +15,50 @@ export class FileSearchProvider implements vscode.FileSearchProvider {
14
15
options : vscode . FileSearchOptions ,
15
16
token : vscode . CancellationToken
16
17
) : vscode . ProviderResult < vscode . Uri [ ] > {
17
- const category = `&${ options . folder . query } &` . includes ( "&csp&" ) ? "CSP" : "*" ;
18
- const generated = `&${ options . folder . query } &` . includes ( "&generated=1&" ) ;
18
+ const folderQuery = url . parse ( options . folder . toString ( true ) , true ) . query ;
19
+ const type = folderQuery . type || "all" ;
20
+ const category =
21
+ folderQuery . csp === "" || folderQuery . csp === "1" ? "CSP" : type === "cls" ? "CLS" : type === "rtn" ? "RTN" : "*" ;
22
+ const generated = folderQuery . generated === "1" ;
19
23
const api = new AtelierAPI ( options . folder ) ;
24
+ let filter = query . pattern ;
25
+ if ( category !== "CSP" ) {
26
+ if ( options . folder . path !== "/" ) {
27
+ filter = options . folder . path . slice ( 1 ) + "/%" + filter ;
28
+ }
29
+ filter = filter . replace ( / \/ / g, "." ) ;
30
+ }
20
31
let counter = 0 ;
21
32
if ( ! api . enabled ) {
22
33
return null ;
23
34
}
24
35
return api
25
36
. getDocNames ( {
26
- filter : query . pattern ,
37
+ filter,
27
38
category,
28
39
generated,
29
40
} )
30
41
. then ( ( data ) => data . result . content )
31
42
. then ( ( files : DocSearchResult [ ] ) =>
32
43
files
33
44
. map ( ( file ) => {
34
- if ( category === "* " && file . cat === "CSP" ) {
45
+ if ( category !== "CSP " && file . cat === "CSP" ) {
35
46
return null ;
36
47
}
37
48
if ( file . cat !== "CSP" ) {
38
49
if ( file . name . startsWith ( "%" ) && api . ns !== "%SYS" ) {
39
50
return null ;
40
51
}
52
+ // Convert dotted name to slashed one, treating the likes of ABC.1.int or DEF.T1.int in the same way
53
+ // as the Studio dialog does.
41
54
const nameParts = file . name . split ( "." ) ;
42
- file . name = nameParts . slice ( 0 , - 2 ) . join ( "/" ) + "/" + nameParts . slice ( - 2 ) . join ( "." ) ;
55
+ const dotParts = nameParts
56
+ . slice ( - 2 )
57
+ . join ( "." )
58
+ . match ( / ^ [ A - Z ] ? \d * [ . ] ( m a c | i n t | i n c ) $ / )
59
+ ? 3
60
+ : 2 ;
61
+ file . name = nameParts . slice ( 0 , - dotParts ) . join ( "/" ) + "/" + nameParts . slice ( - dotParts ) . join ( "." ) ;
43
62
}
44
63
if ( ! options . maxResults || ++ counter <= options . maxResults ) {
45
64
return options . folder . with ( { path : `/${ file . name } ` } ) ;
0 commit comments