todoloo 0.0.1 → 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: 652fcb62bf1d496280e48cd4d10a1616f4626fdb44c69d3a59976962ae9ab141
4
- data.tar.gz: 1dc37022a98ba6c1bd50b3eb790c740cec79f10681e5bafd6f04ed918364f35c
3
+ metadata.gz: 9391333b3186bf9acd092a3d2477768f4f47ae4ef929667e71ae7b3011567a37
4
+ data.tar.gz: 3b85f78433162892ceade94dfebdddff29d9662be2ad6f923ec33b4e24731a6d
5
5
  SHA512:
6
- metadata.gz: b8433b47e15248d606b6c52ede9a9d42096136bd3faac4fb4f24b2698e92c0d6d6003605bfb7972aae479bd7758a24e398c78f39c8141fc4e1b8ea849fc45b35
7
- data.tar.gz: 5d34072524e668e5acfaa679a040c271721b824246db544c6e4c45a23225261e0681ffcd73ecae419109d1fd4f02399c42b7cf6b9f13518f383e91ff1a046ad1
6
+ metadata.gz: c79bf5aee911bf8d3a262e0489f72c28bf67b52ad249a702dee70cde08c59eafb8c477c0d9d42e38e26fc824cd5e6f8a953eb85a92ec91235f5a4f203936f897
7
+ data.tar.gz: e3fcbd9542607dcbb603224232f94d0e90c4a7639d6c45f23e8fb3242afaf1a693d3cee3f4299c85640d2d9211d0e6d9f0e13ee6c47b31691449d948902b2e33
data/.direnv ADDED
@@ -0,0 +1 @@
1
+ PATH_add bin
data/CHANGELOG ADDED
@@ -0,0 +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
+
7
+ 0.0.2 - 19 July 2024
8
+ - Add regression for `Todoloo::TaskList` on writing tasks with blank topics
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,8 +65,20 @@ 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
+
72
+ def topics_for_task(task)
73
+ if task.topics.empty?
74
+ [""]
75
+ else
76
+ task.topics
77
+ end
78
+ end
79
+
41
80
  def converted_tasks(error_handler)
42
- output = {"" => {}}
81
+ output = {}
43
82
 
44
83
  @tasks.each do |task|
45
84
  output_task = {
@@ -47,7 +86,7 @@ module Todoloo
47
86
  "path" => "#{task.path}:#{task.line}:#{task.column}"
48
87
  }
49
88
 
50
- task.topics.each do |topic|
89
+ topics_for_task(task).each do |topic|
51
90
  by_type = output[topic.to_s] ||= {}
52
91
  tasks = by_type[task.type.to_s.downcase] ||= []
53
92
  tasks << output_task.dup
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Todoloo
4
- VERSION = "0.0.1"
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.1
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-18 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,8 @@ executables:
102
102
  extensions: []
103
103
  extra_rdoc_files: []
104
104
  files:
105
+ - ".direnv"
106
+ - CHANGELOG
105
107
  - CODE_OF_CONDUCT.md
106
108
  - LICENSE.txt
107
109
  - README.md