(relativePath: string, node: IProblem, selectedLanguage: string)
| 217 | } |
| 218 | |
| 219 | async function resolveRelativePath(relativePath: string, node: IProblem, selectedLanguage: string): Promise<string> { |
| 220 | let tag: string = ""; |
| 221 | if (/\$\{tag\}/i.test(relativePath)) { |
| 222 | tag = (await resolveTagForProblem(node)) || ""; |
| 223 | } |
| 224 | |
| 225 | let company: string = ""; |
| 226 | if (/\$\{company\}/i.test(relativePath)) { |
| 227 | company = (await resolveCompanyForProblem(node)) || ""; |
| 228 | } |
| 229 | |
| 230 | return relativePath.replace(/\$\{(.*?)\}/g, (_substring: string, ...args: string[]) => { |
| 231 | const placeholder: string = args[0].toLowerCase().trim(); |
| 232 | switch (placeholder) { |
| 233 | case "id": |
| 234 | return node.id; |
| 235 | case "name": |
| 236 | return node.name; |
| 237 | case "camelcasename": |
| 238 | return _.camelCase(node.name); |
| 239 | case "pascalcasename": |
| 240 | return _.upperFirst(_.camelCase(node.name)); |
| 241 | case "kebabcasename": |
| 242 | case "kebab-case-name": |
| 243 | return _.kebabCase(node.name); |
| 244 | case "snakecasename": |
| 245 | case "snake_case_name": |
| 246 | return _.snakeCase(node.name); |
| 247 | case "ext": |
| 248 | return genFileExt(selectedLanguage); |
| 249 | case "language": |
| 250 | return selectedLanguage; |
| 251 | case "difficulty": |
| 252 | return node.difficulty.toLocaleLowerCase(); |
| 253 | case "tag": |
| 254 | return tag; |
| 255 | case "company": |
| 256 | return company; |
| 257 | default: |
| 258 | const errorMsg: string = `The config '${placeholder}' is not supported.`; |
| 259 | leetCodeChannel.appendLine(errorMsg); |
| 260 | throw new Error(errorMsg); |
| 261 | } |
| 262 | }); |
| 263 | } |
| 264 | |
| 265 | async function resolveTagForProblem(problem: IProblem): Promise<string | undefined> { |
| 266 | if (problem.tags.length === 1) { |
no test coverage detected