fortitude-lint 0.8.0__tar.gz → 0.8.0rc1__tar.gz

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.
Files changed (214) hide show
  1. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/Cargo.lock +1 -1
  2. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/PKG-INFO +2 -39
  3. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/README.md +1 -38
  4. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/Cargo.toml +1 -1
  5. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/README.md +1 -38
  6. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/tests/check.rs +12 -12
  7. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/lib.rs +26 -44
  8. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/assumed_size.rs +3 -13
  9. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/intent.rs +2 -2
  10. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/select_default.rs +4 -50
  11. fortitude_lint-0.8.0rc1/crates/fortitude_linter/src/rules/style/line_length.rs +84 -0
  12. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/whitespace.rs +1 -8
  13. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/session/index/fortitude_settings.rs +5 -130
  14. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/session/index.rs +5 -59
  15. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/session.rs +1 -2
  16. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/pyproject.toml +1 -1
  17. fortitude_lint-0.8.0/crates/fortitude_linter/src/rules/style/line_length.rs +0 -144
  18. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/Cargo.toml +0 -0
  19. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/LICENSE +0 -0
  20. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/build.rs +0 -0
  21. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/resources/test/fixtures/include-test/a.f90 +0 -0
  22. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/resources/test/fixtures/include-test/b.f90 +0 -0
  23. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/resources/test/fixtures/include-test/fortitude.toml +0 -0
  24. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/resources/test/fixtures/include-test/nested-project/e.f90 +0 -0
  25. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/resources/test/fixtures/include-test/nested-project/fortitude.toml +0 -0
  26. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/resources/test/fixtures/include-test/subdirectory/c.f90 +0 -0
  27. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/resources/test/fixtures/include-test/subdirectory/d.f90 +0 -0
  28. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/check.rs +0 -0
  29. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/cli.rs +0 -0
  30. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/commands/completions/config.rs +0 -0
  31. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/commands/completions/mod.rs +0 -0
  32. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/commands/config.rs +0 -0
  33. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/commands/mod.rs +0 -0
  34. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/explain.rs +0 -0
  35. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/lib.rs +0 -0
  36. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/main.rs +0 -0
  37. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/printer.rs +0 -0
  38. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/resolve.rs +0 -0
  39. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/server.rs +0 -0
  40. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/show_files.rs +0 -0
  41. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/show_settings.rs +0 -0
  42. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/snapshots/fortitude__version__tests__version_formatting.snap +0 -0
  43. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/snapshots/fortitude__version__tests__version_formatting_with_commit_info.snap +0 -0
  44. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/snapshots/fortitude__version__tests__version_formatting_with_commits_since_last_tag.snap +0 -0
  45. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/snapshots/fortitude__version__tests__version_serializable.snap +0 -0
  46. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/stdin.rs +0 -0
  47. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/src/version.rs +0 -0
  48. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/tests/config.rs +0 -0
  49. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/tests/explain.rs +0 -0
  50. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude/tests/resolve_files.rs +0 -0
  51. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/Cargo.toml +0 -0
  52. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/resources/test/package/fortitude.toml +0 -0
  53. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/resources/test/package/resources/ignored.f90 +0 -0
  54. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/resources/test/package/src/package/app.f90 +0 -0
  55. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/allow_comments.rs +0 -0
  56. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/ast/symbol_table.rs +0 -0
  57. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/ast/types.rs +0 -0
  58. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/ast.rs +0 -0
  59. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/diagnostic_message.rs +0 -0
  60. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/diagnostics.rs +0 -0
  61. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/fix/edits.rs +0 -0
  62. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/fix/mod.rs +0 -0
  63. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/fix/snippet.rs +0 -0
  64. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/fs.rs +0 -0
  65. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/line_width.rs +0 -0
  66. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/locator.rs +0 -0
  67. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/logging.rs +0 -0
  68. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/azure.rs +0 -0
  69. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/diff.rs +0 -0
  70. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/github.rs +0 -0
  71. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/gitlab.rs +0 -0
  72. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/grouped.rs +0 -0
  73. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/json.rs +0 -0
  74. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/json_lines.rs +0 -0
  75. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/junit.rs +0 -0
  76. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/mod.rs +0 -0
  77. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/pylint.rs +0 -0
  78. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/rdjson.rs +0 -0
  79. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/sarif.rs +0 -0
  80. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/message/text.rs +0 -0
  81. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/registry/rule_set.rs +0 -0
  82. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/registry.rs +0 -0
  83. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rule_redirects.rs +0 -0
  84. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rule_selector.rs +0 -0
  85. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rule_table.rs +0 -0
  86. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/accessibility_statements.rs +0 -0
  87. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/conditionals.rs +0 -0
  88. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/derived_default_init.rs +0 -0
  89. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/error_handling.rs +0 -0
  90. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/exit_labels.rs +0 -0
  91. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/external.rs +0 -0
  92. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/implicit_kinds.rs +0 -0
  93. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/implicit_typing.rs +0 -0
  94. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/init_decls.rs +0 -0
  95. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/kind_suffixes.rs +0 -0
  96. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/magic_numbers.rs +0 -0
  97. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/missing_io_specifier.rs +0 -0
  98. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/mod.rs +0 -0
  99. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/nonportable_shortcircuit_inquiry.rs +0 -0
  100. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/split_escaped_quote.rs +0 -0
  101. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/trailing_backslash.rs +0 -0
  102. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/unreachable_statement.rs +0 -0
  103. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/correctness/use_statements.rs +0 -0
  104. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/error/invalid_character.rs +0 -0
  105. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/error/ioerror.rs +0 -0
  106. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/error/mod.rs +0 -0
  107. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/error/syntax_error.rs +0 -0
  108. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/fortitude/allow_comments.rs +0 -0
  109. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/fortitude/mod.rs +0 -0
  110. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/macros.rs +0 -0
  111. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/mod.rs +0 -0
  112. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/modernisation/double_precision.rs +0 -0
  113. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/modernisation/include_statement.rs +0 -0
  114. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/modernisation/mod.rs +0 -0
  115. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/modernisation/mpi.rs +0 -0
  116. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/modernisation/old_style_array_literal.rs +0 -0
  117. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/modernisation/out_of_line_attribute.rs +0 -0
  118. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/modernisation/relational_operators.rs +0 -0
  119. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/obsolescent/common_blocks.rs +0 -0
  120. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/obsolescent/computed_goto.rs +0 -0
  121. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/obsolescent/deprecated_character_syntax.rs +0 -0
  122. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/obsolescent/entry_statement.rs +0 -0
  123. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/obsolescent/mod.rs +0 -0
  124. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/obsolescent/mpi.rs +0 -0
  125. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/obsolescent/openmp.rs +0 -0
  126. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/obsolescent/pause_statement.rs +0 -0
  127. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/obsolescent/specific_names.rs +0 -0
  128. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/obsolescent/statement_functions.rs +0 -0
  129. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/portability/invalid_tab.rs +0 -0
  130. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/portability/literal_kinds.rs +0 -0
  131. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/portability/mod.rs +0 -0
  132. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/portability/non_portable_io_unit.rs +0 -0
  133. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/portability/star_kinds.rs +0 -0
  134. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/double_colon_in_decl.rs +0 -0
  135. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/end_statements.rs +0 -0
  136. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/file_contents.rs +0 -0
  137. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/file_extensions.rs +0 -0
  138. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/functions.rs +0 -0
  139. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/implicit_none.rs +0 -0
  140. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/inconsistent_dimension.rs +0 -0
  141. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/keywords.rs +0 -0
  142. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/mod.rs +0 -0
  143. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/semicolons.rs +0 -0
  144. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/strings.rs +0 -0
  145. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/style/useless_return.rs +0 -0
  146. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/testing/mod.rs +0 -0
  147. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/testing/test_rules.rs +0 -0
  148. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/rules/utilities.rs +0 -0
  149. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/settings.rs +0 -0
  150. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/test.rs +0 -0
  151. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/text_helpers.rs +0 -0
  152. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_linter/src/traits.rs +0 -0
  153. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_macros/Cargo.toml +0 -0
  154. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_macros/src/lib.rs +0 -0
  155. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_macros/src/map_codes.rs +0 -0
  156. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_macros/src/rule_code_prefix.rs +0 -0
  157. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_macros/src/rule_namespace.rs +0 -0
  158. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/CONTRIBUTING.md +0 -0
  159. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/Cargo.toml +0 -0
  160. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/README.md +0 -0
  161. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/resources/test/fixtures/settings/empty.json +0 -0
  162. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/resources/test/fixtures/settings/empty_multiple_workspace.json +0 -0
  163. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/resources/test/fixtures/settings/global_only.json +0 -0
  164. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/resources/test/fixtures/settings/inline_configuration.json +0 -0
  165. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/resources/test/fixtures/settings/vs_code_initialization_options.json +0 -0
  166. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/edit/range.rs +0 -0
  167. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/edit/replacement.rs +0 -0
  168. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/edit/text_document.rs +0 -0
  169. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/edit.rs +0 -0
  170. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/fix.rs +0 -0
  171. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/lib.rs +0 -0
  172. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/lint.rs +0 -0
  173. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/logging.rs +0 -0
  174. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/resolve.rs +0 -0
  175. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/diagnostics.rs +0 -0
  176. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/notifications/cancel.rs +0 -0
  177. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/notifications/did_change.rs +0 -0
  178. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/notifications/did_change_configuration.rs +0 -0
  179. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/notifications/did_change_watched_files.rs +0 -0
  180. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/notifications/did_change_workspace.rs +0 -0
  181. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/notifications/did_close.rs +0 -0
  182. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/notifications/did_open.rs +0 -0
  183. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/notifications.rs +0 -0
  184. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/requests/code_action.rs +0 -0
  185. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/requests/code_action_resolve.rs +0 -0
  186. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/requests/diagnostic.rs +0 -0
  187. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/requests/execute_command.rs +0 -0
  188. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/requests/hover.rs +0 -0
  189. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/requests/shutdown.rs +0 -0
  190. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/requests.rs +0 -0
  191. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api/traits.rs +0 -0
  192. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/api.rs +0 -0
  193. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/connection.rs +0 -0
  194. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/main_loop.rs +0 -0
  195. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/schedule/task.rs +0 -0
  196. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/schedule/thread/pool.rs +0 -0
  197. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/schedule/thread/priority.rs +0 -0
  198. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/schedule/thread.rs +0 -0
  199. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server/schedule.rs +0 -0
  200. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/server.rs +0 -0
  201. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/session/capabilities.rs +0 -0
  202. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/session/client.rs +0 -0
  203. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/session/options.rs +0 -0
  204. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/session/request_queue.rs +0 -0
  205. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/session/settings.rs +0 -0
  206. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_server/src/workspace.rs +0 -0
  207. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_workspace/Cargo.toml +0 -0
  208. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_workspace/src/configuration.rs +0 -0
  209. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_workspace/src/lib.rs +0 -0
  210. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_workspace/src/options.rs +0 -0
  211. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_workspace/src/options_base.rs +0 -0
  212. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/crates/fortitude_workspace/src/resolver.rs +0 -0
  213. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/python/fortitude/__init__.py +0 -0
  214. {fortitude_lint-0.8.0 → fortitude_lint-0.8.0rc1}/python/fortitude/__main__.py +0 -0
@@ -712,7 +712,7 @@ dependencies = [
712
712
 
713
713
  [[package]]
714
714
  name = "fortitude"
715
- version = "0.8.0"
715
+ version = "0.8.0-rc.1"
716
716
  dependencies = [
717
717
  "anyhow",
718
718
  "assert_cmd",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fortitude-lint
3
- Version: 0.8.0
3
+ Version: 0.8.0rc1
4
4
  Classifier: Development Status :: 2 - Pre-Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -276,7 +276,7 @@ Fortitude can be integrated into text editors and IDEs that support the
276
276
  Language Server Protocol (LSP), providing real-time diagnostics and
277
277
  code actions for applying fixes as you work.
278
278
 
279
- Please see the [documentation](https://fortitude.readthedocs.io/en/stable/editors/) for
279
+ Please see the [documentation](fortitude.readthedocs.io/en/stable/editors) for
280
280
  details on setting this up for your editor.
281
281
 
282
282
  A VSCode plugin is in development, and will be released shortly.
@@ -298,43 +298,6 @@ This also includes instructions for building the project from source, running
298
298
  tests, and linting/formatting the code. Please consult our [code of
299
299
  conduct](CODE_OF_CONDUCT.md) before contributing.
300
300
 
301
- ## Projects Using Fortitude
302
-
303
- More and more open-source Fortran projects are using Fortitude to help maintain
304
- their code, including:
305
-
306
- - [ADCIRC](https://github.com/adcirc/adcirc)
307
- - [cp2k](https://github.com/cp2k/cp2k)
308
- - [flexi](https://github.com/flexi-framework/flexi)
309
- - [FTorch](https://github.com/Cambridge-ICCS/FTorch)
310
- - [MESA](https://github.com/MESAHub/mesa)
311
- - [OpenFMS](https://github.com/ispg-group/openfms)
312
- - [The Met Office](https://github.com/MetOffice/growss/tree/main/fortran-lint)
313
-
314
- ### Show Your Support
315
-
316
- If you've found Fortitude useful in your project, please consider adding the
317
- Fortitude badge to your `README.md`:
318
-
319
- ```md
320
- [![Fortitude](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/PlasmaFAIR/fortitude/main/docs/assets/badge/v0.json)](https://github.com/PlasmaFAIR/fortitude)
321
- ```
322
-
323
- or `README.rst`:
324
-
325
- ```rst
326
- .. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/PlasmaFAIR/fortitude/main/docs/assets/badge/v0.json
327
- :target: https://github.com/PlasmaFAIR/fortitude
328
- :alt: Fortitude
329
- ```
330
-
331
- or, as HTML:
332
-
333
- ```html
334
- <a href="https://github.com/PlasmaFAIR/fortitude"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/PlasmaFAIR/fortitude/main/docs/assets/badge/v0.json" alt="Fortitude" style="max-width:100%;"></a>
335
- ```
336
-
337
-
338
301
  ## License
339
302
 
340
303
  This work is distributed under the MIT License. See [`LICENSE`](LICENSE) for more
@@ -255,7 +255,7 @@ Fortitude can be integrated into text editors and IDEs that support the
255
255
  Language Server Protocol (LSP), providing real-time diagnostics and
256
256
  code actions for applying fixes as you work.
257
257
 
258
- Please see the [documentation](https://fortitude.readthedocs.io/en/stable/editors/) for
258
+ Please see the [documentation](fortitude.readthedocs.io/en/stable/editors) for
259
259
  details on setting this up for your editor.
260
260
 
261
261
  A VSCode plugin is in development, and will be released shortly.
@@ -277,43 +277,6 @@ This also includes instructions for building the project from source, running
277
277
  tests, and linting/formatting the code. Please consult our [code of
278
278
  conduct](CODE_OF_CONDUCT.md) before contributing.
279
279
 
280
- ## Projects Using Fortitude
281
-
282
- More and more open-source Fortran projects are using Fortitude to help maintain
283
- their code, including:
284
-
285
- - [ADCIRC](https://github.com/adcirc/adcirc)
286
- - [cp2k](https://github.com/cp2k/cp2k)
287
- - [flexi](https://github.com/flexi-framework/flexi)
288
- - [FTorch](https://github.com/Cambridge-ICCS/FTorch)
289
- - [MESA](https://github.com/MESAHub/mesa)
290
- - [OpenFMS](https://github.com/ispg-group/openfms)
291
- - [The Met Office](https://github.com/MetOffice/growss/tree/main/fortran-lint)
292
-
293
- ### Show Your Support
294
-
295
- If you've found Fortitude useful in your project, please consider adding the
296
- Fortitude badge to your `README.md`:
297
-
298
- ```md
299
- [![Fortitude](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/PlasmaFAIR/fortitude/main/docs/assets/badge/v0.json)](https://github.com/PlasmaFAIR/fortitude)
300
- ```
301
-
302
- or `README.rst`:
303
-
304
- ```rst
305
- .. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/PlasmaFAIR/fortitude/main/docs/assets/badge/v0.json
306
- :target: https://github.com/PlasmaFAIR/fortitude
307
- :alt: Fortitude
308
- ```
309
-
310
- or, as HTML:
311
-
312
- ```html
313
- <a href="https://github.com/PlasmaFAIR/fortitude"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/PlasmaFAIR/fortitude/main/docs/assets/badge/v0.json" alt="Fortitude" style="max-width:100%;"></a>
314
- ```
315
-
316
-
317
280
  ## License
318
281
 
319
282
  This work is distributed under the MIT License. See [`LICENSE`](LICENSE) for more
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "fortitude"
3
- version = "0.8.0"
3
+ version = "0.8.0-rc.1"
4
4
  publish = true
5
5
  description = "A Fortran linter, written in Rust and installable with Python"
6
6
  edition = { workspace = true }
@@ -255,7 +255,7 @@ Fortitude can be integrated into text editors and IDEs that support the
255
255
  Language Server Protocol (LSP), providing real-time diagnostics and
256
256
  code actions for applying fixes as you work.
257
257
 
258
- Please see the [documentation](https://fortitude.readthedocs.io/en/stable/editors/) for
258
+ Please see the [documentation](fortitude.readthedocs.io/en/stable/editors) for
259
259
  details on setting this up for your editor.
260
260
 
261
261
  A VSCode plugin is in development, and will be released shortly.
@@ -277,43 +277,6 @@ This also includes instructions for building the project from source, running
277
277
  tests, and linting/formatting the code. Please consult our [code of
278
278
  conduct](CODE_OF_CONDUCT.md) before contributing.
279
279
 
280
- ## Projects Using Fortitude
281
-
282
- More and more open-source Fortran projects are using Fortitude to help maintain
283
- their code, including:
284
-
285
- - [ADCIRC](https://github.com/adcirc/adcirc)
286
- - [cp2k](https://github.com/cp2k/cp2k)
287
- - [flexi](https://github.com/flexi-framework/flexi)
288
- - [FTorch](https://github.com/Cambridge-ICCS/FTorch)
289
- - [MESA](https://github.com/MESAHub/mesa)
290
- - [OpenFMS](https://github.com/ispg-group/openfms)
291
- - [The Met Office](https://github.com/MetOffice/growss/tree/main/fortran-lint)
292
-
293
- ### Show Your Support
294
-
295
- If you've found Fortitude useful in your project, please consider adding the
296
- Fortitude badge to your `README.md`:
297
-
298
- ```md
299
- [![Fortitude](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/PlasmaFAIR/fortitude/main/docs/assets/badge/v0.json)](https://github.com/PlasmaFAIR/fortitude)
300
- ```
301
-
302
- or `README.rst`:
303
-
304
- ```rst
305
- .. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/PlasmaFAIR/fortitude/main/docs/assets/badge/v0.json
306
- :target: https://github.com/PlasmaFAIR/fortitude
307
- :alt: Fortitude
308
- ```
309
-
310
- or, as HTML:
311
-
312
- ```html
313
- <a href="https://github.com/PlasmaFAIR/fortitude"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/PlasmaFAIR/fortitude/main/docs/assets/badge/v0.json" alt="Fortitude" style="max-width:100%;"></a>
314
- ```
315
-
316
-
317
280
  ## License
318
281
 
319
282
  This work is distributed under the MIT License. See [`LICENSE`](LICENSE) for more
@@ -758,7 +758,7 @@ end program foo
758
758
  success: false
759
759
  exit_code: 1
760
760
  ----- stdout -----
761
- [TEMP_FILE] S081 unnecessary semicolon
761
+ [TEMP_FILE] S081 [*] unnecessary semicolon
762
762
  |
763
763
  4 | integer :: i
764
764
  5 | integer :: j
@@ -795,9 +795,10 @@ end program foo
795
795
 
796
796
  fortitude explain X001,Y002,...
797
797
 
798
+ [*] 1 fixable with the `--fix` option.
798
799
 
799
800
  ----- stderr -----
800
- warning: Syntax errors detected in file: [TEMP_FILE] Discarding subsequent violations from the AST and all fixes.
801
+ warning: Syntax errors detected in file: [TEMP_FILE] Discarding subsequent violations from the AST.
801
802
  ",);
802
803
  Ok(())
803
804
  }
@@ -828,7 +829,7 @@ end program foo
828
829
  success: false
829
830
  exit_code: 1
830
831
  ----- stdout -----
831
- [TEMP_FILE] S081 unnecessary semicolon
832
+ [TEMP_FILE] S081 [*] unnecessary semicolon
832
833
  |
833
834
  4 | integer :: i
834
835
  5 | integer :: j
@@ -839,7 +840,7 @@ end program foo
839
840
  |
840
841
  = help: Remove this character
841
842
 
842
- [TEMP_FILE] S081 unnecessary semicolon
843
+ [TEMP_FILE] S081 [*] unnecessary semicolon
843
844
  |
844
845
  6 | i = 2;
845
846
  7 | j = i ^ 2 ! This is a syntax error
@@ -856,9 +857,9 @@ end program foo
856
857
 
857
858
  fortitude explain X001,Y002,...
858
859
 
860
+ [*] 2 fixable with the `--fix` option.
859
861
 
860
862
  ----- stderr -----
861
- warning: Syntax errors detected in file: [TEMP_FILE] Discarding all fixes. Some violations from the AST may be unreliable.
862
863
  ",);
863
864
  Ok(())
864
865
  }
@@ -890,7 +891,7 @@ end program foo
890
891
  success: false
891
892
  exit_code: 1
892
893
  ----- stdout -----
893
- [TEMP_FILE] S081 unnecessary semicolon
894
+ [TEMP_FILE] S081 [*] unnecessary semicolon
894
895
  |
895
896
  4 | integer :: i
896
897
  5 | integer :: j
@@ -901,7 +902,7 @@ end program foo
901
902
  |
902
903
  = help: Remove this character
903
904
 
904
- [TEMP_FILE] S081 unnecessary semicolon
905
+ [TEMP_FILE] S081 [*] unnecessary semicolon
905
906
  |
906
907
  7 | ! allow(syntax-error)
907
908
  8 | j = i ^ 2 ! This is a syntax error
@@ -918,9 +919,10 @@ end program foo
918
919
 
919
920
  fortitude explain X001,Y002,...
920
921
 
922
+ [*] 2 fixable with the `--fix` option.
921
923
 
922
924
  ----- stderr -----
923
- warning: Syntax errors detected in file: [TEMP_FILE] Discarding subsequent violations from the AST and all fixes.
925
+ warning: Syntax errors detected in file: [TEMP_FILE] Discarding subsequent violations from the AST.
924
926
  ",);
925
927
  Ok(())
926
928
  }
@@ -951,7 +953,7 @@ end program foo
951
953
  success: false
952
954
  exit_code: 1
953
955
  ----- stdout -----
954
- [TEMP_FILE] S081 unnecessary semicolon
956
+ [TEMP_FILE] S081 [*] unnecessary semicolon
955
957
  |
956
958
  6 | i = 2
957
959
  7 | j = i ^ 2 ! This is a syntax error
@@ -968,9 +970,9 @@ end program foo
968
970
 
969
971
  fortitude explain X001,Y002,...
970
972
 
973
+ [*] 1 fixable with the `--fix` option.
971
974
 
972
975
  ----- stderr -----
973
- warning: Syntax errors detected in file: [TEMP_FILE] Discarding all fixes. Some violations from the AST may be unreliable.
974
976
  warning: Syntax errors detected in file: [TEMP_FILE] No fixes will be applied.
975
977
  ",);
976
978
  Ok(())
@@ -2314,7 +2316,6 @@ end program foo
2314
2316
  "#,
2315
2317
  )?;
2316
2318
 
2317
- apply_common_filters!();
2318
2319
  assert_cmd_snapshot!(FortitudeCheck::default()
2319
2320
  .args(["--select=C003", "--ignore=E001"])
2320
2321
  .file(&test_file)
@@ -2328,7 +2329,6 @@ end program foo
2328
2329
 
2329
2330
 
2330
2331
  ----- stderr -----
2331
- warning: Syntax errors detected in file: [TEMP_FILE] Discarding all fixes. Some violations from the AST may be unreliable.
2332
2332
  ");
2333
2333
 
2334
2334
  Ok(())
@@ -350,50 +350,32 @@ pub(crate) fn check_path(
350
350
  }
351
351
  }
352
352
 
353
- // Handle syntax errors
354
- if root.has_error() {
355
- // If syntax error violations are present, we can (probably) trust AST
356
- // violations up to the first syntax error. If we aren't tracking syntax
357
- // errors, we report everything but warn that the results are unreliable.
358
- // In either case, fixes should be considered too risky to apply.
359
- if rules.enabled(Rule::SyntaxError) {
360
- // Check violations for any remaining syntax errors. If any are found, discard violations
361
- // after it, as they may be false positives.
362
- warn_user_once_by_message!(
363
- "Syntax errors detected in file: {}. Discarding subsequent violations from the AST and all fixes.",
364
- path.to_string_lossy()
365
- );
366
- // Sort by byte-offset in the file
367
- violations.sort_by_key(|diagnostic| diagnostic.range.start());
368
- // Retain all violations up to the first syntax error, inclusive.
369
- // Text and path rules can be safely retained.
370
- let syntax_error_idx = violations
371
- .iter()
372
- .position(|diagnostic| diagnostic.kind.rule() == Rule::SyntaxError);
373
- if let Some(syntax_error_idx) = syntax_error_idx {
374
- violations = violations
375
- .into_iter()
376
- .enumerate()
377
- .filter_map(|(idx, diagnostic)| {
378
- if idx <= syntax_error_idx || !diagnostic.kind.rule().is_ast_rule() {
379
- Some(diagnostic)
380
- } else {
381
- None
382
- }
383
- })
384
- .collect_vec();
385
- }
386
- } else {
387
- // If syntax errors are present but the rule is disabled, just warn
388
- // that false positives may be present.
389
- warn_user_once_by_message!(
390
- "Syntax errors detected in file: {}. Discarding all fixes. Some violations from the AST may be unreliable.",
391
- path.to_string_lossy()
392
- );
393
- }
394
- // Disable all fixes
395
- for diagnostic in &mut violations {
396
- diagnostic.fix = None;
353
+ // Check violations for any remaining syntax errors. If any are found, discard violations
354
+ // after it, as they may be false positives.
355
+ if rules.enabled(Rule::SyntaxError) && root.has_error() {
356
+ warn_user_once_by_message!(
357
+ "Syntax errors detected in file: {}. Discarding subsequent violations from the AST.",
358
+ path.to_string_lossy()
359
+ );
360
+ // Sort by byte-offset in the file
361
+ violations.sort_by_key(|diagnostic| diagnostic.range.start());
362
+ // Retain all violations up to the first syntax error, inclusive.
363
+ // Text and path rules can be safely retained.
364
+ let syntax_error_idx = violations
365
+ .iter()
366
+ .position(|diagnostic| diagnostic.kind.rule() == Rule::SyntaxError);
367
+ if let Some(syntax_error_idx) = syntax_error_idx {
368
+ violations = violations
369
+ .into_iter()
370
+ .enumerate()
371
+ .filter_map(|(idx, diagnostic)| {
372
+ if idx <= syntax_error_idx || !diagnostic.kind.rule().is_ast_rule() {
373
+ Some(diagnostic)
374
+ } else {
375
+ None
376
+ }
377
+ })
378
+ .collect_vec();
397
379
  }
398
380
  }
399
381
 
@@ -119,13 +119,11 @@ impl AstRule for AssumedSize {
119
119
  }
120
120
 
121
121
  /// ## What does it do?
122
- /// Checks `character` dummy arguments with an assumed-size length have
123
- /// `intent(in)` only.
122
+ /// Checks `character` dummy arguments have `intent(in)` only
124
123
  ///
125
124
  /// ## Why is this bad?
126
- /// Character dummy arguments whose length is assumed size should only have
127
- /// `intent(in)`, as this can cause data loss with `intent([in]out)`. For
128
- /// example:
125
+ /// Character dummy arguments with an assumed size should only have `intent(in)`, as
126
+ /// this can cause data loss with `intent([in]out)`. For example:
129
127
  ///
130
128
  /// ```f90
131
129
  /// program example
@@ -170,14 +168,6 @@ impl AstRule for AssumedSize {
170
168
  /// text = "hello world!"
171
169
  /// end subroutine set_text
172
170
  /// ```
173
- ///
174
- /// ## User derived type IO procedures
175
- /// The standard mandates assumed-size length with `intent(inout)` for the
176
- /// `iomsg` argument of user defined IO procedures for derived types, although
177
- /// it doesn't specify a minimum length. Unfortunately, Fortitude is currently
178
- /// unable to detect this use. You can use [`allow` (suppression)
179
- /// comments](https://fortitude.readthedocs.io/en/stable/linter/#error-suppression)
180
- /// to disable this rule for those uses only.
181
171
  #[derive(ViolationMetadata)]
182
172
  pub(crate) struct AssumedSizeCharacterIntent {
183
173
  name: String,
@@ -67,8 +67,8 @@ impl AstRule for MissingIntent {
67
67
  symbol_table.get(param.to_text(src.source_text())?)
68
68
  })
69
69
  .filter(|param| {
70
- // Procedures are not allowed intent
71
- !(param.type_().is_procedure() || param.has_attribute(AttributeKind::External))
70
+ // Not allowed intent
71
+ !param.type_().is_procedure()
72
72
  })
73
73
  .filter(|param| {
74
74
  // Intent only allowed on pointers after F2003
@@ -12,56 +12,10 @@ use tree_sitter::Node;
12
12
  /// ## Why is this bad?
13
13
  /// Select statements without a default case can lead to incomplete handling of
14
14
  /// the possible options. If a value isn't handled by any of the cases, the
15
- /// program will continue execution, which may lead to surprising results. This
16
- /// is a common source of bugs when adding new options, as it's easy to forget
17
- /// to update all `select` statements. Unfortunately, because Fortran doesn't
18
- /// have proper enums, it's not possible for the compiler to issue warnings for
19
- /// non-exhaustive cases. Having a default case allows for the program to
20
- /// gracefully handle errors.
21
- ///
22
- /// ## Examples
23
- ///
24
- /// Instead of:
25
- ///
26
- /// ```f90
27
- /// select case(ntype)
28
- /// case (1)
29
- /// call routine1()
30
- /// case (2)
31
- /// call routine2()
32
- /// end select
33
- /// ```
34
- ///
35
- /// use:
36
- ///
37
- /// ```f90
38
- /// select case(ntype)
39
- /// case (1)
40
- /// call routine1()
41
- /// case (2)
42
- /// call routine2()
43
- /// case default
44
- /// call handle_error("Invalid ntype: ", ntype)
45
- /// end select
46
- /// ```
47
- ///
48
- /// If you do only intend to handle a subset of cases, you can use a `continue`
49
- /// statement with an explanatory comment:
50
- ///
51
- /// ```f90
52
- /// select case(ntype)
53
- /// case (1)
54
- /// call routine1()
55
- /// case (2)
56
- /// call routine2()
57
- /// case default
58
- /// ! Other ntypes handled elsewhere
59
- /// continue
60
- /// end select
61
- /// ```
62
- ///
63
- /// You may also consider instead using an `if` statement. This can make your
64
- /// intention more obvious.
15
+ /// program will continue execution, which may lead to surprising results.
16
+ /// Unfortunately, because Fortran doesn't have proper enums, it's not possible
17
+ /// for the compiler to issue warnings for non-exhaustive cases. Having a default
18
+ /// case allows for the program to gracefully handle errors.
65
19
  #[derive(ViolationMetadata)]
66
20
  pub(crate) struct MissingDefaultCase {}
67
21
 
@@ -0,0 +1,84 @@
1
+ /// Defines rules that govern line length.
2
+ use crate::settings::CheckSettings;
3
+ use lazy_regex::regex_is_match;
4
+ use ruff_diagnostics::{Diagnostic, Violation};
5
+ use ruff_macros::{ViolationMetadata, derive_message_formats};
6
+ use ruff_source_file::SourceFile;
7
+ use ruff_source_file::UniversalNewlines;
8
+ use ruff_text_size::{TextLen, TextRange, TextSize};
9
+
10
+ /// ## What does it do?
11
+ /// Checks line length isn't too long
12
+ ///
13
+ /// ## Why is this bad?
14
+ /// Long lines are more difficult to read, and may not fit on some developers'
15
+ /// terminals. The line continuation character '&' may be used to split a long line
16
+ /// across multiple lines, and overly long expressions may be broken down into
17
+ /// multiple parts.
18
+ ///
19
+ /// The maximum line length can be changed using the flag `--line-length=N`. The
20
+ /// default maximum line length is 100 characters. This is a fair bit more than the
21
+ /// traditional 80, but due to the verbosity of modern Fortran it can sometimes be
22
+ /// difficult to squeeze lines into that width, especially when using large indents
23
+ /// and multiple levels of indentation.
24
+ ///
25
+ /// Some lines that are longer than the maximum length may be acceptable, such as
26
+ /// long strings or comments. This is to allow for long URLs or other text that cannot
27
+ /// be reasonably split across multiple lines.
28
+ ///
29
+ /// Note that the Fortran standard states a maximum line length of 132 characters,
30
+ /// and while some modern compilers will support longer lines, for portability it
31
+ /// is recommended to stay beneath this limit.
32
+ #[derive(ViolationMetadata)]
33
+ pub(crate) struct LineTooLong {
34
+ max_length: usize,
35
+ actual_length: usize,
36
+ }
37
+
38
+ impl Violation for LineTooLong {
39
+ #[derive_message_formats]
40
+ fn message(&self) -> String {
41
+ let Self {
42
+ max_length,
43
+ actual_length,
44
+ } = self;
45
+ format!("line length of {actual_length}, exceeds maximum {max_length}")
46
+ }
47
+ }
48
+
49
+ impl LineTooLong {
50
+ pub fn check(settings: &CheckSettings, source_file: &SourceFile) -> Vec<Diagnostic> {
51
+ let source = source_file.to_source_code();
52
+ let max_length = settings.line_length;
53
+ let mut violations = Vec::new();
54
+ for line in source.text().universal_newlines() {
55
+ // Note: Can't use string.len(), as that gives byte length, not char length
56
+ let actual_length = line.chars().count();
57
+ if actual_length > max_length {
58
+ // Are we ending on a string or comment? If so, we'll allow it through, as it may
59
+ // contain something like a long URL that cannot be reasonably split across multiple
60
+ // lines.
61
+ if regex_is_match!(r#"(["']\w*&?$)|(!.*$)|(^\w*&)"#, line.as_str()) {
62
+ continue;
63
+ }
64
+ // Get the byte range from the first character that oversteps the limit
65
+ // to the end of the line
66
+ let extra_bytes: TextSize = line
67
+ .chars()
68
+ .rev()
69
+ .take(actual_length - max_length)
70
+ .map(TextLen::text_len)
71
+ .sum();
72
+ let range = TextRange::new(line.end() - extra_bytes, line.end());
73
+ violations.push(Diagnostic::new(
74
+ Self {
75
+ max_length,
76
+ actual_length,
77
+ },
78
+ range,
79
+ ));
80
+ }
81
+ }
82
+ violations
83
+ }
84
+ }
@@ -151,14 +151,7 @@ impl AstRule for IncorrectSpaceBeforeComment {
151
151
  }
152
152
  if whitespace < 2 {
153
153
  let edit = Edit::insertion(" "[whitespace..].to_string(), comment_start);
154
- // Unwraps are fine here because we're guaranteed to be at least 2
155
- // characters into the file, and `whitespace` is at most 1
156
- let span_start = comment_start
157
- .checked_sub(TextSize::try_from(whitespace).unwrap())
158
- .unwrap();
159
-
160
- let span = TextRange::new(span_start, comment_start);
161
- return some_vec!(Diagnostic::new(Self {}, span).with_fix(Fix::safe_edit(edit)));
154
+ return some_vec!(Diagnostic::from_node(Self {}, node).with_fix(Fix::safe_edit(edit)));
162
155
  }
163
156
  None
164
157
  }