Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not consider enums as unused variables. #59

Merged
merged 1 commit into from
Apr 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions src/plugins/trackCodeFlow/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,45 @@ describe('trackCodeFlow', () => {
expect(actual).deep.equal(expected);
});

describe('does not mark enums as uninitialised vars', () => {
it('in a regular file', async () => {
const diagnostics = await linter.run({
...project1,
files: ['source/enums.bs'],
rules: {
'unused-variable': 'error'
}
});
const actual = fmtDiagnostics(diagnostics);
const expected = [];
expect(actual).deep.equal(expected);
});
it('inside a class', async () => {
const diagnostics = await linter.run({
...project1,
files: ['source/enum-in-class.bs'],
rules: {
'unused-variable': 'error'
}
});
const actual = fmtDiagnostics(diagnostics);
const expected = [];
expect(actual).deep.equal(expected);
});
it('inside a namespace', async () => {
const diagnostics = await linter.run({
...project1,
files: ['source/enum-in-namespace.bs'],
rules: {
'unused-variable': 'error'
}
});
const actual = fmtDiagnostics(diagnostics);
const expected = [];
expect(actual).deep.equal(expected);
});
});

it('implements assign-all-paths', async () => {
const diagnostics = await linter.run({
...project1,
Expand Down
11 changes: 6 additions & 5 deletions src/plugins/trackCodeFlow/varTracking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -368,16 +368,17 @@ function deferredVarLinter(
deferred: ValidationInfo[],
diagnostics: BsDiagnostic[]
) {
// lookups for namespaces and classes
// lookups for namespaces, classes, and enums
// to add them to the topLevel so that they don't get marked as unused.
const toplevel = new Set<string>(globals);
scope.getAllNamespaceStatements().forEach(ns => {
toplevel.add(ns.name.toLowerCase().split('.')[0]); // keep root of namespace
});
scope.getClassMap().forEach(cls => {
const name = cls.item.name.text.toLowerCase();
if (!cls.item.namespaceName) {
toplevel.add(name);
}
toplevel.add(cls.item.name.text.toLowerCase());
});
scope.getEnumMap().forEach(enm => {
toplevel.add(enm.item.name.toLowerCase());
});
if (isBrsFile(file)) {
file.parser.references.classStatements.forEach(cls => {
Expand Down
10 changes: 10 additions & 0 deletions test/project1/source/enum-in-class.bs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class MyClass
public value
public sub new()
enum MyEnum
val1
val2
end enum
m.value = MyEnum.val1
end sub
end class
10 changes: 10 additions & 0 deletions test/project1/source/enum-in-namespace.bs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace MyNamespace
enum MyEnum
val1
val2
end enum

function foo() as integer
return MyEnum.val1
end function
end namespace
13 changes: 13 additions & 0 deletions test/project1/source/enums.bs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
enum Day
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
end enum

sub main()
? Day.Monday
end sub