todoloo 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e10a05abef8c425b5e2e9347d1bccc9e592f5e7a03a5608f84aa5495cfdf45e
4
- data.tar.gz: 3e0febaa61ee4a872d045d8df00f9b49e17716ae3384b52a1aad8e0efbd4ec68
3
+ metadata.gz: 9391333b3186bf9acd092a3d2477768f4f47ae4ef929667e71ae7b3011567a37
4
+ data.tar.gz: 3b85f78433162892ceade94dfebdddff29d9662be2ad6f923ec33b4e24731a6d
5
5
  SHA512:
6
- metadata.gz: aefc739a86f6120a9383f3edec5b84433498cdcfe747fa40fd72654fc61ab4925137be92402c2303e37db9ead9b632837171a58d9c1142fdc80fa664deb43387
7
- data.tar.gz: b0862355aa8fdb6bbfc4c405f8b0f83fd84a489f930c9aca3728bbae1b9888481bde8f34c1d3ed9632934068c685d84302e3f9df995dfea209b3573ddcef3033
6
+ metadata.gz: c79bf5aee911bf8d3a262e0489f72c28bf67b52ad249a702dee70cde08c59eafb8c477c0d9d42e38e26fc824cd5e6f8a953eb85a92ec91235f5a4f203936f897
7
+ data.tar.gz: e3fcbd9542607dcbb603224232f94d0e90c4a7639d6c45f23e8fb3242afaf1a693d3cee3f4299c85640d2d9211d0e6d9f0e13ee6c47b31691449d948902b2e33
data/.direnv ADDED
@@ -0,0 +1 @@
1
+ PATH_add bin
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ Unreleased
2
+
3
+ 0.0.3 - 8 August 2024
4
+ - Add sorting support to `TaskList` and now sort CLI output by default
5
+ - Fix parsing for multiple tags, as in `TODO(a,b,c)`
6
+
1
7
  0.0.2 - 19 July 2024
2
8
  - Add regression for `Todoloo::TaskList` on writing tasks with blank topics
3
9
 
data/lib/todoloo/cli.rb CHANGED
@@ -9,6 +9,7 @@ class Todoloo::CLI < Thor
9
9
  Todoloo::FileScanner
10
10
  .new("**/*.rb", excludes: options[:exclude] || [], trace: true)
11
11
  .scan
12
+ .sort
12
13
  .write("tasks.yml")
13
14
  end
14
15
 
@@ -18,7 +19,7 @@ class Todoloo::CLI < Thor
18
19
  Todoloo::Parser
19
20
  .new
20
21
  .parse_and_transform($stdin.read)
21
- ).write($stdout)
22
+ ).sort.write($stdout)
22
23
  end
23
24
 
24
25
  def self.exit_on_failure?
@@ -148,7 +148,7 @@ module Todoloo
148
148
 
149
149
  rule(:topic) { match(/[^),]/).repeat(1).as(:topic) }
150
150
 
151
- rule(:topic_rest) { (str(",") >> spacing.maybe >> topic).repeat(0, 1) }
151
+ rule(:topic_rest) { (str(",") >> spacing.maybe >> topic).repeat(0) }
152
152
 
153
153
  # (topic1, topic2)
154
154
  rule(:topics) { lparen >> topic >> topic_rest >> rparen }
data/lib/todoloo/task.rb CHANGED
@@ -10,5 +10,9 @@ module Todoloo
10
10
  hash.fetch(:column)
11
11
  )
12
12
  end
13
+
14
+ def location
15
+ "#{path}:#{line}:#{column}"
16
+ end
13
17
  end
14
18
  end
@@ -2,6 +2,20 @@ require "yaml"
2
2
 
3
3
  module Todoloo
4
4
  class TaskList
5
+ include Enumerable
6
+
7
+ # Lower means higher priority
8
+ SEVERITY_INDEX = {
9
+ "FIXME" => 100,
10
+ "HACK" => 200,
11
+ "TODO" => 300,
12
+ "XXX" => 400,
13
+ "NOTE" => 500,
14
+ "HBD" => 600
15
+ }.freeze
16
+
17
+ UNKNOWN_INDEX = 1_000_000
18
+
5
19
  def initialize
6
20
  @tasks = []
7
21
  end
@@ -17,6 +31,19 @@ module Todoloo
17
31
  self
18
32
  end
19
33
 
34
+ def each
35
+ to_enum(:each) unless block_given?
36
+
37
+ @tasks.each { |task| yield task }
38
+ end
39
+
40
+ def sort
41
+ @tasks.sort_by! do |t|
42
+ [t.topics, task_severity(t), t.path, t.line, t.column]
43
+ end
44
+ self
45
+ end
46
+
20
47
  # Structure:
21
48
  # TOPIC:
22
49
  # TYPE:
@@ -38,6 +65,10 @@ module Todoloo
38
65
 
39
66
  private
40
67
 
68
+ def task_severity(task)
69
+ SEVERITY_INDEX.fetch(task.type, UNKNOWN_INDEX)
70
+ end
71
+
41
72
  def topics_for_task(task)
42
73
  if task.topics.empty?
43
74
  [""]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Todoloo
4
- VERSION = "0.0.2"
4
+ VERSION = "0.0.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: todoloo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Coetzee
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-19 00:00:00.000000000 Z
11
+ date: 2024-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -102,6 +102,7 @@ executables:
102
102
  extensions: []
103
103
  extra_rdoc_files: []
104
104
  files:
105
+ - ".direnv"
105
106
  - CHANGELOG
106
107
  - CODE_OF_CONDUCT.md
107
108
  - LICENSE.txt