Skip to content

Commit 1570d1e

Browse files
authored
Merge from TSCO CLI
1 parent 1bdbb00 commit 1570d1e

14 files changed

Lines changed: 316 additions & 82 deletions

.vscode/settings.json

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,25 @@
1212
".git_ignore": true,
1313
"out": true
1414
},
15-
"cSpell.enabled": false
16-
}
15+
"cSpell.enabled": false,
16+
"workbench.colorCustomizations": {
17+
"activityBar.activeBackground": "#fa1b49",
18+
"activityBar.background": "#fa1b49",
19+
"activityBar.foreground": "#e7e7e7",
20+
"activityBar.inactiveForeground": "#e7e7e799",
21+
"activityBarBadge.background": "#155e02",
22+
"activityBarBadge.foreground": "#e7e7e7",
23+
"commandCenter.border": "#e7e7e799",
24+
"sash.hoverBorder": "#fa1b49",
25+
"statusBar.background": "#dd0531",
26+
"statusBar.foreground": "#e7e7e7",
27+
"statusBarItem.hoverBackground": "#fa1b49",
28+
"statusBarItem.remoteBackground": "#dd0531",
29+
"statusBarItem.remoteForeground": "#e7e7e7",
30+
"titleBar.activeBackground": "#dd0531",
31+
"titleBar.activeForeground": "#e7e7e7",
32+
"titleBar.inactiveBackground": "#dd053199",
33+
"titleBar.inactiveForeground": "#e7e7e799"
34+
},
35+
"peacock.color": "#dd0531"
36+
}

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,3 +218,9 @@ See [TypeScript Code Organizer Command Line Interface](https://www.npmjs.com/pac
218218
- fix issue with declaring modules
219219
- add support for exported enums, exported interfaces, exported classes and exported types (courtesy of [Carlos Jesús Huchim Ahumada](https://github.com/huchim))
220220
- add improved import statement grouping
221+
222+
## 2.0.12
223+
- add missing file namespace import grouping
224+
- add checking relative import source casing
225+
- add support for declaration dependency order resolution
226+
- fix issue with file name casing

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "tsco",
33
"displayName": "TypeScript Code Organizer",
44
"description": "TypeScript Code Organizer for VS Code",
5-
"version": "2.0.10",
5+
"version": "2.0.12",
66
"publisher": "aljazsim",
77
"author": {
88
"name": "aljazsim",

src/extension.ts

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import globToRegExp from "glob-to-regexp";
21
import * as vscode from "vscode";
32

3+
import globToRegExp from "glob-to-regexp";
4+
45
import { Settings } from "./settings/settings";
56
import { Configuration } from "./tsco-cli/configuration/configuration";
67
import { fileExists, getDirectoryPath, getFullPath, getRelativePath, joinPath, readFile, writeFile } from "./tsco-cli/helpers/file-system-helper";
8+
import { log, setLogger } from "./tsco-cli/source-code/source-code-logger";
79
import { SourceCodeOrganizer } from "./tsco-cli/source-code/source-code-organizer";
810

911
// #region Functions (10)
@@ -14,21 +16,17 @@ async function getConfiguration(configurationFilePath: string | null)
1416
{
1517
if (await fileExists(configurationFilePath))
1618
{
17-
output.appendLine(`tsco using configuration file ${configurationFilePath}`);
18-
1919
// absolute configuration file path from settings
2020
return await Configuration.getConfiguration(configurationFilePath);
2121
}
2222
else if (await fileExists(joinPath(getWorkspaceRootDirectoryPath(), configurationFilePath)))
2323
{
24-
output.appendLine(`tsco using configuration file ${joinPath(getWorkspaceRootDirectoryPath(), configurationFilePath)}`);
25-
2624
// relative configuration file path from settings
2725
return await Configuration.getConfiguration(joinPath(getWorkspaceRootDirectoryPath(), configurationFilePath));
2826
}
2927
else
3028
{
31-
output.appendLine(`tsco configuration file ${getFullPath(configurationFilePath)} not found`);
29+
log(`tsco configuration file ${getFullPath(configurationFilePath)} not found`);
3230
}
3331
}
3432

@@ -38,8 +36,6 @@ async function getConfiguration(configurationFilePath: string | null)
3836

3937
if (await fileExists(configurationFilePath))
4038
{
41-
output.appendLine(`tsco using configuration file ${configurationFilePath}`);
42-
4339
// look in workspace root
4440
return await Configuration.getConfiguration(configurationFilePath);
4541
}
@@ -52,13 +48,11 @@ async function getConfiguration(configurationFilePath: string | null)
5248

5349
if (await fileExists(configurationFilePath))
5450
{
55-
output.appendLine(`tsco using configuration file ${configurationFilePath}`);
56-
5751
return await Configuration.getConfiguration(configurationFilePath);
5852
}
5953
}
6054

61-
output.appendLine("tsco using default configuration");
55+
log("tsco using default configuration");
6256

6357
// default configuration
6458
return Configuration.getDefaultConfiguration();
@@ -196,12 +190,12 @@ async function organize(sourceCodeFilePath: string, configuration: Configuration
196190

197191
if (configuration.files.include.length > 0)
198192
{
199-
include = configuration.files.include.some(inc => matches(inc, sourceCodeFilePathRelative) || matches(inc, "./" + sourceCodeFilePathRelative));
193+
include = configuration.files.include.some(inc => matches(inc, sourceCodeFilePathRelative) || matches(inc, sourceCodeFilePathRelative.replace("../", "").replace("./", "")));
200194
}
201195

202196
if (configuration.files.exclude.length > 0)
203197
{
204-
exclude = configuration.files.exclude.some(exc => matches(exc, sourceCodeFilePathRelative) || matches(exc, "./" + sourceCodeFilePathRelative));
198+
exclude = configuration.files.exclude.some(exc => matches(exc, sourceCodeFilePathRelative) || matches(exc, sourceCodeFilePathRelative.replace("../", "").replace("./", "")));
205199
}
206200

207201
if (include && !exclude)
@@ -223,22 +217,22 @@ async function organize(sourceCodeFilePath: string, configuration: Configuration
223217

224218
await vscode.workspace.applyEdit(edit);
225219

226-
output.appendLine(`tsco organized ${sourceCodeFilePath}`);
220+
log(`tsco organized ${sourceCodeFilePath}`);
227221

228222
return true;
229223
}
230224
else
231225
{
232-
output.appendLine(`tsco skipping organizing ${sourceCodeFilePath}, because it is already organized`);
226+
log(`tsco skipping organizing ${sourceCodeFilePath}, because it is already organized`);
233227
}
234228
}
235229
else if (!include)
236230
{
237-
output.appendLine(`tsco skipping organizing ${sourceCodeFilePath}, because it does not match file include patterns`);
231+
log(`tsco skipping organizing ${sourceCodeFilePath}, because it does not match file include patterns`);
238232
}
239233
else if (exclude)
240234
{
241-
output.appendLine(`tsco skipping organizing ${sourceCodeFilePath}, because it matches file exclude patterns`);
235+
log(`tsco skipping organizing ${sourceCodeFilePath}, because it matches file exclude patterns`);
242236
}
243237

244238
return false;
@@ -256,6 +250,11 @@ export function activate(context: vscode.ExtensionContext)
256250

257251
vscode.workspace.onDidChangeConfiguration(() => settings = Settings.getSettings());
258252
savingHandler = vscode.workspace.onWillSaveTextDocument(async (e) => await onSave(e.document.uri.fsPath));
253+
254+
setLogger({
255+
log: (message: string) => output.appendLine(message),
256+
logError: (error: string | Error | unknown) => output.appendLine(`ERROR: ${error instanceof Error ? error.message : error?.toString() ?? ""}`)
257+
});
259258
}
260259

261260
// #endregion Exported Functions

src/tsco-cli/configuration/configuration.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { TypeMemberType } from "../enums/type-member-type";
77
import { distinct, remove } from "../helpers/array-helper";
88
import { fileExists, readFile } from "../helpers/file-system-helper";
99
import { convertPascalCaseToTitleCase } from "../helpers/string-helper";
10+
import { log } from "../source-code/source-code-logger";
1011
import { ClassConfiguration } from "./class-configuration";
1112
import { ClassMemberConfiguration } from "./class-member-configuration";
1213
import { ClassMemberGroupConfiguration } from "./class-member-group-configuration";
@@ -55,16 +56,16 @@ export class Configuration
5556
{
5657
configuration = JSON.parse(await readFile(configurationFilePath));
5758

58-
console.log(`tsco using configuration ${configurationFilePath}`);
59+
log(`tsco using configuration file ${configurationFilePath}`);
5960
}
6061
else
6162
{
62-
console.log("tsco using default configuration");
63+
log("tsco using default configuration");
6364
}
6465
}
6566
catch
6667
{
67-
console.log("tsco using default configuration");
68+
log("tsco using default configuration");
6869
}
6970

7071
return new Configuration(

src/tsco-cli/elements/class-node.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@ import { StaticBlockDeclarationNode } from "./static-block-declaration-node";
1616

1717
export class ClassNode extends ElementNode
1818
{
19-
// #region Properties (15)
19+
// #region Properties (14)
2020

2121
public readonly accessors: AccessorNode[] = [];
2222
public readonly constructors: ConstructorNode[] = [];
2323
public readonly decorators: string[];
24-
public readonly dependencies: string[] = [];
2524
public readonly getters: GetterNode[] = [];
2625
public readonly isAbstract: boolean;
2726
public readonly isExport: boolean;

src/tsco-cli/elements/element-node.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ import { getLeadingComment, getTrailingComment } from "../helpers/node-helper";
44

55
export abstract class ElementNode
66
{
7-
// #region Properties (4)
7+
// #region Properties (5)
88

9+
public readonly dependencies: string[] = [];
910
public readonly leadingComment: string | null;
1011
public abstract readonly name: string;
1112
public readonly sourceCode: string;

src/tsco-cli/elements/property-node.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as ts from "typescript";
22

33
import { AccessModifier } from "../enums/access-modifier";
44
import { WriteModifier } from "../enums/write-modifier";
5-
import { getAccessModifier, getDecorators, getIsAbstract, getIsArrowFunction, getIsStatic, getWriteMode } from "../helpers/node-helper";
5+
import { getAccessModifier, getDecorators, getDependencies, getIsAbstract, getIsArrowFunction, getIsStatic, getWriteMode } from "../helpers/node-helper";
66
import { ElementNode } from "./element-node";
77

88
export class PropertyNode extends ElementNode
@@ -41,6 +41,14 @@ export class PropertyNode extends ElementNode
4141
this.writeMode = getWriteMode(propertyDeclaration);
4242

4343
this.isArrowFunction = getIsArrowFunction(propertyDeclaration);
44+
45+
if (propertyDeclaration.initializer)
46+
{
47+
for (const dependency of getDependencies(sourceFile, propertyDeclaration.initializer, []))
48+
{
49+
this.dependencies.push(dependency);
50+
}
51+
}
4452
}
4553

4654
// #endregion Constructors

src/tsco-cli/elements/variable-node.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ import { ElementNode } from "./element-node";
55

66
export class VariableNode extends ElementNode
77
{
8-
// #region Properties (3)
8+
// #region Properties (2)
99

10-
public readonly dependencies: string[] = [];
1110
public readonly isArrowFunction: boolean = false;
1211
public readonly name: string;
1312

@@ -19,15 +18,27 @@ export class VariableNode extends ElementNode
1918
{
2019
super(sourceFile, variableDeclaration, leadingComment, trailingComment);
2120

22-
this.name = (<ts.Identifier>variableDeclaration.name).escapedText?.toString() ?? sourceFile.getFullText().substring(variableDeclaration.name.pos, variableDeclaration.name.end).trim();
21+
if (ts.isIdentifier(variableDeclaration.name) && variableDeclaration.name.escapedText)
22+
{
23+
this.name = variableDeclaration.name.escapedText!.toString();
24+
}
25+
else if (ts.isObjectBindingPattern(variableDeclaration.name))
26+
{
27+
this.name = variableDeclaration.name.elements.map(e => (<ts.Identifier>e.name).escapedText!.toString()).join(",");
28+
}
29+
else
30+
{
31+
this.name = sourceFile.getFullText().substring(variableDeclaration.name.pos, variableDeclaration.name.end).trim();
32+
}
2333

2434
this.isArrowFunction = getIsArrowFunction(variableDeclaration);
2535

2636
if (variableDeclaration.initializer)
2737
{
28-
// we'll use this when sorting variables to make sure a variable that
29-
// depends on another variable is declared after the dependant variable
30-
this.dependencies = getDependencies(sourceFile, variableDeclaration.initializer, []);
38+
for (const dependency of getDependencies(sourceFile, variableDeclaration.initializer, []))
39+
{
40+
this.dependencies.push(dependency);
41+
}
3142
}
3243
}
3344

src/tsco-cli/enums/Import-source-file-path-quote-type.ts renamed to src/tsco-cli/enums/import-source-file-path-quote-type.ts

File renamed without changes.

0 commit comments

Comments
 (0)