todoloo 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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