├── .github ├── no-response.yml └── workflows │ └── ci.yml ├── .gitignore ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md ├── LICENSE.md ├── PULL_REQUEST_TEMPLATE.md ├── README.md ├── coffeelint.json ├── grammars └── todo.cson ├── package.json ├── snippets └── todo.cson └── spec └── todo-spec.coffee /.github/no-response.yml: -------------------------------------------------------------------------------- 1 | # Configuration for probot-no-response - https://github.com/probot/no-response 2 | 3 | # Number of days of inactivity before an issue is closed for lack of response 4 | daysUntilClose: 28 5 | 6 | # Label requiring a response 7 | responseRequiredLabel: more-information-needed 8 | 9 | # Comment to post when closing an issue for lack of response. Set to `false` to disable. 10 | closeComment: > 11 | This issue has been automatically closed because there has been no response 12 | to our request for more information from the original author. With only the 13 | information that is currently in the issue, we don't have enough information 14 | to take action. Please reach out if you have or find the answers we need so 15 | that we can investigate further. 16 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push] 4 | 5 | env: 6 | CI: true 7 | 8 | jobs: 9 | Test: 10 | strategy: 11 | matrix: 12 | os: [ubuntu-latest, macos-latest, windows-latest] 13 | channel: [stable, beta] 14 | runs-on: ${{ matrix.os }} 15 | steps: 16 | - uses: actions/checkout@v1 17 | - uses: UziTech/action-setup-atom@v2 18 | with: 19 | version: ${{ matrix.channel }} 20 | - name: Install dependencies 21 | run: apm install 22 | - name: Run tests 23 | run: atom --test spec 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | See the [Atom contributing guide](https://github.com/atom/atom/blob/master/CONTRIBUTING.md) 2 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | ### Prerequisites 10 | 11 | * [ ] Put an X between the brackets on this line if you have done all of the following: 12 | * Reproduced the problem in Safe Mode: http://flight-manual.atom.io/hacking-atom/sections/debugging/#using-safe-mode 13 | * Followed all applicable steps in the debugging guide: http://flight-manual.atom.io/hacking-atom/sections/debugging/ 14 | * Checked the FAQs on the message board for common solutions: https://discuss.atom.io/c/faq 15 | * Checked that your issue isn't already filed: https://github.com/issues?utf8=✓&q=is%3Aissue+user%3Aatom 16 | * Checked that there is not already an Atom package that provides the described functionality: https://atom.io/packages 17 | 18 | ### Description 19 | 20 | [Description of the issue] 21 | 22 | ### Steps to Reproduce 23 | 24 | 1. [First Step] 25 | 2. [Second Step] 26 | 3. [and so on...] 27 | 28 | **Expected behavior:** [What you expect to happen] 29 | 30 | **Actual behavior:** [What actually happens] 31 | 32 | **Reproduces how often:** [What percentage of the time does it reproduce?] 33 | 34 | ### Versions 35 | 36 | You can get this information from copy and pasting the output of `atom --version` and `apm --version` from the command line. Also, please include the OS and what version of the OS you're running. 37 | 38 | ### Additional Information 39 | 40 | Any additional information, configuration or data that might be necessary to reproduce the issue. 41 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 GitHub Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | 22 | -------------------------------------------------------------------- 23 | 24 | This package was derived from a TextMate bundle located at 25 | https://github.com/textmate/todo.tmbundle and distributed under the following 26 | license, located in `README.mdown`: 27 | 28 | Permission to copy, use, modify, sell and distribute this 29 | software is granted. This software is provided "as is" without 30 | express or implied warranty, and with no claim as to its 31 | suitability for any purpose. 32 | -------------------------------------------------------------------------------- /PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Requirements 2 | 3 | * Filling out the template is required. Any pull request that does not include enough information to be reviewed in a timely manner may be closed at the maintainers' discretion. 4 | * All new code requires tests to ensure against regressions 5 | 6 | ### Description of the Change 7 | 8 | 13 | 14 | ### Alternate Designs 15 | 16 | 17 | 18 | ### Benefits 19 | 20 | 21 | 22 | ### Possible Drawbacks 23 | 24 | 25 | 26 | ### Applicable Issues 27 | 28 | 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ##### Atom and all repositories under Atom will be archived on December 15, 2022. Learn more in our [official announcement](https://github.blog/2022-06-08-sunsetting-atom/) 2 | # TODO support in Atom 3 | [![CI](https://github.com/atom/language-todo/actions/workflows/ci.yml/badge.svg)](https://github.com/atom/language-todo/actions/workflows/ci.yml) 4 | 5 | Adds syntax highlighting to `TODO`, `FIXME`, `CHANGED`, `XXX`, `IDEA`, `HACK`, `NOTE`, `REVIEW`, `NB`, `BUG`, `QUESTION`, `COMBAK`, `TEMP`, `DEBUG`, `OPTIMIZE`, and `WARNING` in comments 6 | and text in Atom. 7 | 8 | Originally [converted](http://flight-manual.atom.io/hacking-atom/sections/converting-from-textmate) from the [TODO TextMate bundle](https://github.com/textmate/todo.tmbundle). 9 | 10 | Contributions are greatly appreciated. Please fork this repository and open a pull request to add snippets, make grammar tweaks, etc. 11 | -------------------------------------------------------------------------------- /coffeelint.json: -------------------------------------------------------------------------------- 1 | { 2 | "max_line_length": { 3 | "level": "ignore" 4 | }, 5 | "no_empty_param_list": { 6 | "level": "error" 7 | }, 8 | "arrow_spacing": { 9 | "level": "error" 10 | }, 11 | "no_interpolation_in_single_quotes": { 12 | "level": "error" 13 | }, 14 | "no_debugger": { 15 | "level": "error" 16 | }, 17 | "prefer_english_operator": { 18 | "level": "error" 19 | }, 20 | "colon_assignment_spacing": { 21 | "spacing": { 22 | "left": 0, 23 | "right": 1 24 | }, 25 | "level": "error" 26 | }, 27 | "braces_spacing": { 28 | "spaces": 0, 29 | "level": "error" 30 | }, 31 | "spacing_after_comma": { 32 | "level": "error" 33 | }, 34 | "no_stand_alone_at": { 35 | "level": "error" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /grammars/todo.cson: -------------------------------------------------------------------------------- 1 | 'scopeName': 'text.todo' 2 | 'injectionSelector': 'comment, text.plain' 3 | 'patterns': [ 4 | { 5 | 'match': '(?' 13 | 'name': 'storage.type.class.radar' 14 | } 15 | ] 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "language-todo", 3 | "version": "0.29.4", 4 | "description": "TODO/FIXME highlighting support in Atom", 5 | "engines": { 6 | "atom": "*", 7 | "node": "*" 8 | }, 9 | "homepage": "http://atom.github.io/language-todo", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/atom/language-todo.git" 13 | }, 14 | "license": "MIT", 15 | "bugs": { 16 | "url": "https://github.com/atom/language-todo/issues" 17 | }, 18 | "devDependencies": { 19 | "coffeelint": "^1.10.1" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /snippets/todo.cson: -------------------------------------------------------------------------------- 1 | '.source.ruby, .source.puppet, .source.coffee, .source.python': 2 | 'todo': 3 | 'prefix': 'todo' 4 | 'body': '# TODO: $0' 5 | 'fixme': 6 | 'prefix': 'fix' 7 | 'body': '# FIXME: $0' 8 | 'xxx': 9 | 'prefix': 'xxx' 10 | 'body': '# XXX: $0' 11 | 'idea': 12 | 'prefix': 'idea' 13 | 'body': '# IDEA: $0' 14 | 'hack': 15 | 'prefix': 'hack' 16 | 'body': '# HACK: $0' 17 | 'note': 18 | 'prefix': 'note' 19 | 'body': '# NOTE: $0' 20 | 'review': 21 | 'prefix': 'review' 22 | 'body': '# REVIEW: $0' 23 | 'bug': 24 | 'prefix': 'bug' 25 | 'body': '# BUG: $0' 26 | 'question': 27 | 'prefix': 'question' 28 | 'body': '# QUESTION: $0' 29 | 'combak': 30 | 'prefix': 'combak' 31 | 'body': '# COMBAK: $0' 32 | 'temp': 33 | 'prefix': 'temp' 34 | 'body': '# TEMP: $0' 35 | 'debug': 36 | 'prefix': 'debug' 37 | 'body': '# DEBUG: $0' 38 | 'optimize': 39 | 'prefix': 'optimize' 40 | 'body': '# OPTIMIZE: $0' 41 | 'warning': 42 | 'prefix': 'warning' 43 | 'body': '# WARNING: $0' 44 | 45 | '.text.haml': 46 | 'todo': 47 | 'prefix': 'todo' 48 | 'body': '-# TODO: $0' 49 | 'fixme': 50 | 'prefix': 'fix' 51 | 'body': '-# FIXME: $0' 52 | 'xxx': 53 | 'prefix': 'xxx' 54 | 'body': '-# XXX: $0' 55 | 'idea': 56 | 'prefix': 'idea' 57 | 'body': '-# IDEA: $0' 58 | 'hack': 59 | 'prefix': 'hack' 60 | 'body': '-# HACK: $0' 61 | 'note': 62 | 'prefix': 'note' 63 | 'body': '-# NOTE: $0' 64 | 'review': 65 | 'prefix': 'review' 66 | 'body': '-# REVIEW: $0' 67 | 'bug': 68 | 'prefix': 'bug' 69 | 'body': '-# BUG: $0' 70 | 'question': 71 | 'prefix': 'question' 72 | 'body': '-# QUESTION: $0' 73 | 'combak': 74 | 'prefix': 'combak' 75 | 'body': '-# COMBAK: $0' 76 | 'temp': 77 | 'prefix': 'temp' 78 | 'body': '-# TEMP: $0' 79 | 'debug': 80 | 'prefix': 'debug' 81 | 'body': '-# DEBUG: $0' 82 | 'optimize': 83 | 'prefix': 'optimize' 84 | 'body': '-# OPTIMIZE: $0' 85 | 'warning': 86 | 'prefix': 'warning' 87 | 'body': '-# WARNING: $0' 88 | 89 | '.text.html.ruby, .text.erb': 90 | 'todo': 91 | 'prefix': 'todo' 92 | 'body': '<%# TODO: $0 %>' 93 | 'fixme': 94 | 'prefix': 'fix' 95 | 'body': '<%# FIXME: $0 %>' 96 | 'xxx': 97 | 'prefix': 'xxx' 98 | 'body': '<%# XXX: $0 %>' 99 | 'idea': 100 | 'prefix': 'idea' 101 | 'body': '<%# IDEA: $0 %>' 102 | 'hack': 103 | 'prefix': 'hack' 104 | 'body': '<%# HACK: $0 %>' 105 | 'note': 106 | 'prefix': 'note' 107 | 'body': '<%# NOTE: $0 %>' 108 | 'review': 109 | 'prefix': 'review' 110 | 'body': '<%# REVIEW: $0 %>' 111 | 'bug': 112 | 'prefix': 'bug' 113 | 'body': '<%# BUG: $0 %>' 114 | 'question': 115 | 'prefix': 'question' 116 | 'body': '<%# QUESTION: $0 %>' 117 | 'combak': 118 | 'prefix': 'combak' 119 | 'body': '<%# COMBAK: $0 %>' 120 | 'temp': 121 | 'prefix': 'temp' 122 | 'body': '<%# TEMP: $0 %>' 123 | 'debug': 124 | 'prefix': 'debug' 125 | 'body': '<%# DEBUG: $0 %>' 126 | 'optimize': 127 | 'prefix': 'optimize' 128 | 'body': '<%# OPTIMIZE: $0 %>' 129 | 'warning': 130 | 'prefix': 'warning' 131 | 'body': '<%# WARNING: $0 %>' 132 | 133 | '.text.html.ruby .meta.tag, .text.erb .meta.tag': 134 | 'todo': 135 | 'prefix': 'todo' 136 | 'fixme': 137 | 'prefix': 'fix' 138 | 'xxx': 139 | 'prefix': 'xxx' 140 | 'idea': 141 | 'prefix': 'idea' 142 | 'hack': 143 | 'prefix': 'hack' 144 | 'note': 145 | 'prefix': 'note' 146 | 'review': 147 | 'prefix': 'review' 148 | 'bug': 149 | 'prefix': 'bug' 150 | 'question': 151 | 'prefix': 'question' 152 | 'combak': 153 | 'prefix': 'combak' 154 | 'temp': 155 | 'prefix': 'temp' 156 | 'debug': 157 | 'prefix': 'debug' 158 | 'optimize': 159 | 'prefix': 'optimize' 160 | 'warning': 161 | 'prefix': 'warning' 162 | 163 | '.html.basic': 164 | 'todo': 165 | 'prefix': 'todo', 166 | 'body': '' 167 | 'fixme': 168 | 'prefix': 'fix', 169 | 'body': '' 170 | 'xxx': 171 | 'prefix': 'xxx', 172 | 'body': '' 173 | 'idea': 174 | 'prefix': 'idea', 175 | 'body': '' 176 | 'hack': 177 | 'prefix': 'hack', 178 | 'body': '' 179 | 'note': 180 | 'prefix': 'note', 181 | 'body': '' 182 | 'review': 183 | 'prefix': 'review', 184 | 'body': '' 185 | 'bug': 186 | 'prefix': 'bug' 187 | 'body': '' 188 | 'question': 189 | 'prefix': 'question' 190 | 'body': '' 191 | 'combak': 192 | 'prefix': 'combak' 193 | 'body': '' 194 | 'temp': 195 | 'prefix': 'temp' 196 | 'body': '' 197 | 'debug': 198 | 'prefix': 'debug' 199 | 'body': '' 200 | 'optimize': 201 | 'prefix': 'optimize' 202 | 'body': '' 203 | 'warning': 204 | 'prefix': 'warning' 205 | 'body': '' 206 | 207 | '.html.basic .meta.tag': 208 | 'todo': 209 | 'prefix': 'todo', 210 | 'fixme': 211 | 'prefix': 'fix', 212 | 'xxx': 213 | 'prefix': 'xxx', 214 | 'idea': 215 | 'prefix': 'idea', 216 | 'hack': 217 | 'prefix': 'hack', 218 | 'note': 219 | 'prefix': 'note', 220 | 'review': 221 | 'prefix': 'review', 222 | 'bug': 223 | 'prefix': 'bug' 224 | 'question': 225 | 'prefix': 'question' 226 | 'combak': 227 | 'prefix': 'combak' 228 | 'temp': 229 | 'prefix': 'temp' 230 | 'debug': 231 | 'prefix': 'debug' 232 | 'optimize': 233 | 'prefix': 'optimize' 234 | 'warning': 235 | 'prefix': 'warning' 236 | 237 | '.source.scss, .source.sass, .source.css.scss, .source.css.sass, .source.css.less, .source.js, .source.go, .source.scala, .source.ts, .source.php, .source.java': 238 | 'todo': 239 | 'prefix': 'todo' 240 | 'body': '// TODO: $0' 241 | 'fixme': 242 | 'prefix': 'fix' 243 | 'body': '// FIXME: $0' 244 | 'xxx': 245 | 'prefix': 'xxx' 246 | 'body': '// XXX: $0' 247 | 'idea': 248 | 'prefix': 'idea' 249 | 'body': '// IDEA: $0' 250 | 'hack': 251 | 'prefix': 'hack' 252 | 'body': '// HACK: $0' 253 | 'note': 254 | 'prefix': 'note' 255 | 'body': '// NOTE: $0' 256 | 'review': 257 | 'prefix': 'review' 258 | 'body': '// REVIEW: $0' 259 | 'bug': 260 | 'prefix': 'bug' 261 | 'body': '// BUG: $0' 262 | 'question': 263 | 'prefix': 'question' 264 | 'body': '// QUESTION: $0' 265 | 'combak': 266 | 'prefix': 'combak' 267 | 'body': '// COMBAK: $0' 268 | 'temp': 269 | 'prefix': 'temp' 270 | 'body': '// TEMP: $0' 271 | 'debug': 272 | 'prefix': 'debug' 273 | 'body': '// DEBUG: $0' 274 | 'optimize': 275 | 'prefix': 'optimize' 276 | 'body': '// OPTIMIZE: $0' 277 | 'warning': 278 | 'prefix': 'warning' 279 | 'body': '// WARNING: $0' 280 | 281 | '.source.css': 282 | 'todo': 283 | 'prefix': 'todo' 284 | 'body': '/* TODO: $0 */' 285 | 'fixme': 286 | 'prefix': 'fix' 287 | 'body': '/* FIXME: $0 */' 288 | 'xxx': 289 | 'prefix': 'xxx' 290 | 'body': '/* XXX: $0 */' 291 | 'idea': 292 | 'prefix': 'idea' 293 | 'body': '/* IDEA: $0 */' 294 | 'hack': 295 | 'prefix': 'hack' 296 | 'body': '/* HACK: $0 */' 297 | 'note': 298 | 'prefix': 'note' 299 | 'body': '/* NOTE: $0 */' 300 | 'review': 301 | 'prefix': 'review' 302 | 'body': '/* REVIEW: $0 */' 303 | 'bug': 304 | 'prefix': 'bug' 305 | 'body': '/* BUG: $0 */' 306 | 'question': 307 | 'prefix': 'question' 308 | 'body': '/* QUESTION: $0 */' 309 | 'combak': 310 | 'prefix': 'combak' 311 | 'body': '/* COMBAK: $0 */' 312 | 'temp': 313 | 'prefix': 'temp' 314 | 'body': '/* TEMP: $0 */' 315 | 'debug': 316 | 'prefix': 'debug' 317 | 'body': '/* DEBUG: $0 */' 318 | 'optimize': 319 | 'prefix': 'optimize' 320 | 'body': '/* OPTIMIZE: $0 */' 321 | 'warning': 322 | 'prefix': 'warning' 323 | 'body': '/* WARNING: $0 */' 324 | 325 | '.source.css .meta.property-value': 326 | 'todo': 327 | 'prefix': 'todo' 328 | 'fixme': 329 | 'prefix': 'fix' 330 | 'xxx': 331 | 'prefix': 'xxx' 332 | 'idea': 333 | 'prefix': 'idea' 334 | 'hack': 335 | 'prefix': 'hack' 336 | 'note': 337 | 'prefix': 'note' 338 | 'review': 339 | 'prefix': 'review' 340 | 'bug': 341 | 'prefix': 'bug' 342 | 'question': 343 | 'prefix': 'question' 344 | 'combak': 345 | 'prefix': 'combak' 346 | 'temp': 347 | 'prefix': 'temp' 348 | 'debug': 349 | 'prefix': 'debug' 350 | 'optimize': 351 | 'prefix': 'optimize' 352 | 'warning': 353 | 'prefix': 'warning' 354 | 355 | '.text.html.php': 356 | 'todo': 357 | 'prefix': 'todo' 358 | 'body': '$0' 359 | 'fixme': 360 | 'prefix': 'fix' 361 | 'body': '$0' 362 | 'xxx': 363 | 'prefix': 'xxx' 364 | 'body': '$0' 365 | 'idea': 366 | 'prefix': 'idea' 367 | 'body': '$0' 368 | 'hack': 369 | 'prefix': 'hack' 370 | 'body': '$0' 371 | 'note': 372 | 'prefix': 'note' 373 | 'body': '$0' 374 | 'review': 375 | 'prefix': 'review' 376 | 'body': '$0' 377 | 'bug': 378 | 'prefix': 'bug' 379 | 'body': '$0' 380 | 'question': 381 | 'prefix': 'question' 382 | 'body': '$0' 383 | 'combak': 384 | 'prefix': 'combak' 385 | 'body': '$0' 386 | 'temp': 387 | 'prefix': 'temp' 388 | 'body': '$0' 389 | 'debug': 390 | 'prefix': 'debug' 391 | 'body': '$0' 392 | 'optimize': 393 | 'prefix': 'optimize' 394 | 'body': '$0' 395 | 'warning': 396 | 'prefix': 'warning' 397 | 'body': '$0' 398 | -------------------------------------------------------------------------------- /spec/todo-spec.coffee: -------------------------------------------------------------------------------- 1 | describe "TODO grammar", -> 2 | grammar = null 3 | 4 | beforeEach -> 5 | waitsForPromise -> 6 | atom.packages.activatePackage("language-todo") 7 | 8 | runs -> 9 | grammar = atom.grammars.grammarForScopeName("text.todo") 10 | 11 | it "parses the grammar", -> 12 | expect(grammar).toBeTruthy() 13 | expect(grammar.scopeName).toBe "text.todo" 14 | --------------------------------------------------------------------------------