Skip to content

Commit

Permalink
Merge 88955ef into b740031
Browse files Browse the repository at this point in the history
  • Loading branch information
albertms10 committed Apr 5, 2023
2 parents b740031 + 88955ef commit 86fa436
Show file tree
Hide file tree
Showing 24 changed files with 172 additions and 122 deletions.
63 changes: 63 additions & 0 deletions .github/workflows/analysis-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: Analysis CI

on:
push:
branches: [main]

pull_request:
branches: [main]
types: [opened, synchronize, ready_for_review, reopened]

env:
DART_SDK_VERSION: "2.19.6"

permissions:
contents: read

jobs:
build:
name: Analyze
runs-on: ubuntu-latest
timeout-minutes: 5

steps:
- uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0

- name: Cache dependencies
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
id: cache
with:
path: ~/.pub-cache/hosted
key: ${{ runner.os }}-pubspec-${{ env.DART_SDK_VERSION }}-${{ hashFiles('**/pubspec.lock') }}
restore-keys: |
${{ runner.os }}-pubspec-${{ env.DART_SDK_VERSION }}-
${{ runner.os }}-pubspec-
${{ runner.os }}-
- name: Set up Dart
uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f # v1.5.0
with:
sdk: ${{ env.DART_SDK_VERSION }}

- name: Verify formatting
run: dart format --output=none --set-exit-if-changed .

- name: Install dependencies
run: dart pub get

- name: Analyze project source
run: dart analyze --fatal-infos

- name: Analyze Dart Code Metrics
run: dart run dart_code_metrics:metrics analyze lib --fatal-style --fatal-performance

- name: Run tests
run: |
dart pub global activate coverage
dart test --coverage=coverage
dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --report-on=lib
- name: Coveralls upload
uses: coverallsapp/github-action@67662d24394fd74bffcf7b462d1b432814159afd # v2.0.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
38 changes: 0 additions & 38 deletions .github/workflows/dart.yml

This file was deleted.

1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ coverage/
test/.test_coverage.dart
.coveralls.yaml

.vscode/
doc/api/

# Avoid committing generated Javascript files:
Expand Down
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"cSpell.ignoreWords": ["music"]
}
119 changes: 67 additions & 52 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,62 +2,77 @@ include: package:very_good_analysis/analysis_options.yaml

linter:
rules:
- always_put_required_named_parameters_first
- avoid_bool_literals_in_conditional_expressions
- avoid_catches_without_on_clauses
- avoid_classes_with_only_static_members
- avoid_dynamic_calls
- avoid_function_literals_in_foreach_calls
- avoid_redundant_argument_values
- avoid_renaming_method_parameters
- avoid_returning_null_for_future
- avoid_void_async
- avoid_web_libraries_in_flutter
- cascade_invocations
- lines_longer_than_80_chars
- avoid_types_on_closure_parameters
- cancel_subscriptions
- constant_identifier_names
- deprecated_consistency
- depend_on_referenced_packages
- directives_ordering
- eol_at_end_of_file
- flutter_style_todos
- no_default_cases
- noop_primitive_operations
- omit_local_variable_types
- only_throw_errors
- prefer_const_constructors
- prefer_const_literals_to_create_immutables
- prefer_expression_function_bodies
- prefer_contains
- prefer_final_in_for_each
- prefer_final_locals
# - prefer_final_parameters
# - public_member_api_docs
- prefer_if_elements_to_conditional_expressions
- prefer_interpolation_to_compose_strings
- prefer_is_empty
- prefer_is_not_empty
- prefer_single_quotes
- prefer_void_to_null
- require_trailing_commas
- sort_pub_dependencies
- sort_unnamed_constructors_first
- type_annotate_public_apis
- unawaited_futures
- unnecessary_null_checks
- unnecessary_parenthesis
- unnecessary_statements
- use_build_context_synchronously
- use_late_for_private_fields_and_variables
- use_setters_to_change_properties
- use_test_throws_matchers
- use_to_and_as_if_applicable
# - discarded_futures
- unnecessary_null_aware_operator_on_extension_on_nullable

dart_code_metrics:
metrics:
cyclomatic-complexity: 20
maximum-nesting-level: 5
number-of-arguments: 4
metrics-exclude:
- test/**
rules:
- arguments-ordering
- avoid-cascade-after-if-null
- avoid-collection-methods-with-unrelated-types
- avoid-double-slash-imports
- avoid-duplicate-exports
- avoid-global-state
- avoid-missing-enum-constant-in-map
- avoid-nested-conditional-expressions:
acceptable-level: 2
- avoid-redundant-async
- avoid-throw-in-catch-block
- avoid-unnecessary-conditionals
- avoid-unnecessary-setstate
- avoid-unnecessary-type-assertions
- avoid-unnecessary-type-casts
- avoid-unrelated-type-assertions
- binary-expression-operand-order
- double-literal-format
- format-comment:
ignored-patterns:
- ^coverage.*
# - member-ordering
- missing-test-assertion
- newline-before-return
- no-boolean-literal-compare
- no-equal-then-else
# - no-magic-number
- prefer-conditional-expressions
- prefer-correct-test-file-name:
exclude:
- lib/**
- bin/**
- "**/main.dart"
- prefer-enums-by-name
# - prefer-extracting-callbacks
- prefer-first
- prefer-immediate-return
- prefer-iterable-of
- prefer-last
- prefer-match-file-name:
exclude:
- test/**
# - prefer-moving-to-variable
- prefer-trailing-comma
anti-patterns:
- long-parameter-list

analyzer:
plugins:
- dart_code_metrics

errors:
always_put_required_named_parameters_first: ignore
implicit_dynamic_map_literal: ignore
prefer_int_literals: ignore
avoid_equals_and_hash_code_on_mutable_classes: ignore
public_member_api_docs: ignore
unused_element: ignore # See https://github.com/dart-lang/sdk/issues/49025

# Style decisions
always_put_required_named_parameters_first: ignore
always_use_package_imports: ignore
sort_constructors_first: ignore
2 changes: 1 addition & 1 deletion lib/src/classes/enharmonic.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

@immutable
abstract class Enharmonic<T extends MusicItem>
Expand Down
6 changes: 3 additions & 3 deletions lib/src/classes/enharmonic_interval.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
part of music_notes;
part of '../../music_notes.dart';

class EnharmonicInterval extends Enharmonic<Interval> {
EnharmonicInterval(Set<Interval> items) : super(items);
EnharmonicInterval(super.items);

EnharmonicInterval.fromSemitones(int semitones)
: this(_fromSemitones(semitones));
Expand Down Expand Up @@ -34,7 +34,7 @@ class EnharmonicInterval extends Enharmonic<Interval> {
if (QualitiesValues.exists(intervalBelow, semitones))
Interval.fromDesiredSemitones(intervalBelow!, semitones),
if (QualitiesValues.exists(intervalAbove, semitones))
Interval.fromDesiredSemitones(intervalAbove!, semitones)
Interval.fromDesiredSemitones(intervalAbove!, semitones),
});
}

Expand Down
4 changes: 2 additions & 2 deletions lib/src/classes/enharmonic_note.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
part of music_notes;
part of '../../music_notes.dart';

class EnharmonicNote extends Enharmonic<Note> {
EnharmonicNote(Set<Note> items) : super(items);
EnharmonicNote(super.items);

EnharmonicNote.fromSemitones(int semitones) : this(_fromSemitones(semitones));

Expand Down
2 changes: 1 addition & 1 deletion lib/src/classes/interval.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

@immutable
class Interval implements MusicItem, Comparable<Interval> {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/classes/key_signature.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

@immutable
class KeySignature {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/classes/note.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

@immutable
class Note implements MusicItem, Comparable<Note> {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/classes/relative_tonalities.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

@immutable
class RelativeTonalities implements Comparable<RelativeTonalities> {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/classes/tonality.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

@immutable
class Tonality implements Comparable<Tonality> {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/enums/accidentals.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

enum Accidentals {
tripleSharp,
Expand Down
6 changes: 4 additions & 2 deletions lib/src/enums/intervals.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

enum Intervals {
unison,
Expand All @@ -18,7 +18,8 @@ enum Intervals {
}

extension IntervalsValues on Intervals {
static const intervalsQualitiesIndex = {
// ignore: avoid-missing-enum-constant-in-map
static const Map<Intervals, int> intervalsQualitiesIndex = {
Intervals.unison: 0,
Intervals.second: 1,
Intervals.third: 3,
Expand Down Expand Up @@ -142,6 +143,7 @@ extension IntervalsValues on Intervals {
/// ```
Intervals get inverted {
final diff = 9 - simplified.ordinal;

return fromOrdinal(diff > 0 ? diff : diff.abs() + 2);
}
}
2 changes: 1 addition & 1 deletion lib/src/enums/modes.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

enum Modes { major, minor }

Expand Down
2 changes: 1 addition & 1 deletion lib/src/enums/notes.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

enum Notes { ut, re, mi, fa, sol, la, si }

Expand Down
5 changes: 4 additions & 1 deletion lib/src/enums/qualities.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

enum Qualities { augmented, major, perfect, minor, diminished }

Expand All @@ -24,6 +24,7 @@ extension QualitiesValues on Qualities {
Qualities.augmented,
};

// ignore: avoid-missing-enum-constant-in-map
static const invertedQualities = {
Qualities.augmented: Qualities.diminished,
Qualities.perfect: Qualities.perfect,
Expand Down Expand Up @@ -57,6 +58,7 @@ extension QualitiesValues on Qualities {
if (interval == null) return false;

final delta = semitones - interval.semitones + (interval.isPerfect ? 0 : 1);

return delta > 0 && delta <= intervalQualities(interval).length;
}

Expand Down Expand Up @@ -91,6 +93,7 @@ extension QualitiesValues on Qualities {
/// ```
Qualities get inverted {
final inverted = invertedQualities[this];

return inverted ??
invertedQualities.keys
.firstWhere((quality) => this == invertedQualities[quality]);
Expand Down
2 changes: 1 addition & 1 deletion lib/src/interfaces/music_item.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

abstract class MusicItem {
/// Returns the number of semitones that correspond to this [MusicItem].
Expand Down
2 changes: 1 addition & 1 deletion lib/src/interfaces/transposable.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of music_notes;
part of '../../music_notes.dart';

abstract class Transposable<T> {
/// Returns a transposed [T] by [semitones] from this [T].
Expand Down
Loading

0 comments on commit 86fa436

Please sign in to comment.