Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ members = ["crates/*"]
resolver = "2"

[workspace.package]
edition = "2021"
rust-version = "1.81.0"
edition = "2024"
rust-version = "1.88.0"
authors = ["Squawk Team & Contributors"]
license = "Apache-2.0 OR MIT"

Expand Down
9 changes: 9 additions & 0 deletions PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,15 @@ select name, created from u join t using (t_id);
select name, u.created from u join t using (t_id);
```

### Rule: invalid literal

Check for invalid literals

```sql
select '{"foo": 1,}'::json;
-- ^ invalid json, unexpected trailing comma
```

### Rule: column label is the same as an existing column

```sql
Expand Down
8 changes: 4 additions & 4 deletions crates/squawk/src/debug.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ use serde_json::json;
use squawk_syntax::{ast::AstNode, syntax_error::SyntaxError};

use crate::{
file::{sql_from_path, sql_from_stdin},
DebugOption,
file::{sql_from_path, sql_from_stdin},
};

pub(crate) fn debug<W: io::Write>(
Expand All @@ -26,9 +26,9 @@ pub(crate) fn debug<W: io::Write>(
if verbose {
let content = &sql[start as usize..(start + token.len) as usize];
start += token.len;
writeln!(f, "{:?} @ {:?}", content, token.kind)?;
writeln!(f, "{content:?} @ {:?}", token.kind)?;
} else {
writeln!(f, "{:?}", token)?;
writeln!(f, "{token:?}")?;
}
}
}
Expand All @@ -54,7 +54,7 @@ pub(crate) fn debug<W: io::Write>(
snap += &format!("@{:?}:{:?} {:?}", range.start(), range.end(), text);
}
}
writeln!(f, "{}", snap)?;
writeln!(f, "{snap}")?;
let renderer = Renderer::styled();
render_syntax_errors(&errors, filename, sql, |message| {
writeln!(f, "{}", renderer.render(message))?;
Expand Down
14 changes: 5 additions & 9 deletions crates/squawk/src/github.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use crate::config::Config;
use crate::reporter::{fmt_tty_violation, CheckReport};
use crate::Command;
use crate::config::Config;
use crate::reporter::{CheckReport, fmt_tty_violation};
use crate::{file_finding::find_paths, reporter::check_files};
use anyhow::{anyhow, bail, Result};
use anyhow::{Result, anyhow, bail};
use console::strip_ansi_codes;
use log::info;
use squawk_github::{actions, app, comment_on_pr, GitHubApi};
use squawk_github::{GitHubApi, actions, app, comment_on_pr};
use squawk_linter::{Rule, Version};

const VERSION: &str = env!("CARGO_PKG_VERSION");
Expand Down Expand Up @@ -178,11 +178,7 @@ fn get_comment_body(files: &[CheckReport], version: &str) -> String {
}

const fn get_violations_emoji(count: usize) -> &'static str {
if count > 0 {
"🚒"
} else {
"✅"
}
if count > 0 { "🚒" } else { "✅" }
}

fn get_sql_file_content(violation: &CheckReport) -> Result<String> {
Expand Down
4 changes: 2 additions & 2 deletions crates/squawk/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -204,10 +204,10 @@ Please open an issue at https://github.com/sbdchd/squawk/issues/new with the log
conf.assume_in_transaction.unwrap_or_default()
};

info!("pg version: {:?}", pg_version);
info!("pg version: {pg_version:?}");
info!("excluded rules: {:?}", &excluded_rules);
info!("excluded paths: {:?}", &excluded_paths);
info!("assume in a transaction: {:?}", assume_in_transaction);
info!("assume in a transaction: {assume_in_transaction:?}");

let mut clap_app = Opt::clap();
let stdout = io::stdout();
Expand Down
22 changes: 17 additions & 5 deletions crates/squawk/src/reporter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ use std::path::PathBuf;
use std::process::ExitCode;

use crate::{
file::{sql_from_path, sql_from_stdin},
Reporter,
file::{sql_from_path, sql_from_stdin},
};

fn check_sql(
Expand Down Expand Up @@ -223,11 +223,23 @@ fn print_summary<W: io::Write>(f: &mut W, summary: &Summary) -> Result<()> {
f,
"Found {total_violations} issue{plural} in {files_with_violations} file{files_plural} (checked {files_checked} {files_checked_plural})",
total_violations = summary.total_violations,
plural = if summary.total_violations == 1 { "" } else { "s" },
plural = if summary.total_violations == 1 {
""
} else {
"s"
},
files_with_violations = summary.files_with_violations,
files_plural = if summary.files_with_violations == 1 { "" } else { "s" },
files_plural = if summary.files_with_violations == 1 {
""
} else {
"s"
},
files_checked = summary.files_checked,
files_checked_plural = if summary.files_checked == 1 { "source file" } else { "source files" }
files_checked_plural = if summary.files_checked == 1 {
"source file"
} else {
"source files"
}
)?;
}
Ok(())
Expand Down Expand Up @@ -355,7 +367,7 @@ select \;
#[cfg(test)]
mod test_reporter {
use super::check_sql;
use crate::reporter::{print_violations, Reporter};
use crate::reporter::{Reporter, print_violations};
use console::strip_ansi_codes;
use insta::{assert_debug_snapshot, assert_snapshot};

Expand Down
4 changes: 2 additions & 2 deletions crates/squawk_github/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
[package]
name = "squawk_github"
version = "0.0.0"
authors = ["Steve Dignam <steve@dignam.xyz>"]
edition = "2018"
authors.workspace = true
edition.workspace = true
license.workspace = true
description = "Postgres SQL linter Github APIs used in Squawk"
repository = "https://github.com/sbdchd/squawk"
Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_lexer/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ impl Cursor<'_> {
return LiteralKind::Int {
base,
empty_int: false,
}
};
}
}
} else {
Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/ignore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ pub(crate) fn find_ignores(ctx: &mut Linter, file: &SyntaxNode) {
#[cfg(test)]
mod test {

use crate::{find_ignores, Linter, Rule};
use crate::{Linter, Rule, find_ignores};

#[test]
fn single_ignore() {
Expand Down
8 changes: 4 additions & 4 deletions crates/squawk_linter/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
use std::collections::HashSet;
use std::fmt;

use enum_iterator::all;
use enum_iterator::Sequence;
use ignore::find_ignores;
use enum_iterator::all;
pub use ignore::Ignore;
use ignore::find_ignores;
use ignore_index::IgnoreIndex;
use lazy_static::lazy_static;
use rowan::TextRange;
Expand Down Expand Up @@ -152,7 +152,7 @@ impl TryFrom<&str> for Rule {
"ban-alter-domain-with-add-constraint" => Ok(Rule::BanAlterDomainWithAddConstraint),
"ban-truncate-cascade" => Ok(Rule::BanTruncateCascade),
// xtask:new-rule:str-name
_ => Err(format!("Unknown violation name: {}", s)),
_ => Err(format!("Unknown violation name: {s}")),
}
}
}
Expand Down Expand Up @@ -211,7 +211,7 @@ impl fmt::Display for Rule {
Rule::BanTruncateCascade => "ban-truncate-cascade",
// xtask:new-rule:variant-to-name
};
write!(f, "{}", val)
write!(f, "{val}")
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/rules/adding_not_null_field.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/rules/adding_required_field.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/rules/ban_char_field.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile, TokenText,
ast::{self, AstNode},
};

use crate::visitors::check_not_allowed_types;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use squawk_syntax::{ast, Parse, SourceFile};
use squawk_syntax::{Parse, SourceFile, ast};

use crate::{Linter, Rule, Violation};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use rowan::TextRange;
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/rules/ban_drop_column.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/rules/ban_drop_database.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/rules/ban_drop_not_null.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/rules/ban_drop_table.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/rules/ban_truncate_cascade.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use squawk_syntax::{ast, Parse, SourceFile};
use squawk_syntax::{Parse, SourceFile, ast};

use crate::{Linter, Rule, Violation};

Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/rules/changing_column_type.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use std::collections::HashSet;

use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{text::trim_quotes, Linter, Rule, Violation};
use crate::{Linter, Rule, Violation, text::trim_quotes};

pub fn tables_created_in_transaction(
assume_in_transaction: bool,
Expand Down
4 changes: 2 additions & 2 deletions crates/squawk_linter/src/rules/disallow_unique_constraint.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{text::trim_quotes, Linter, Rule, Violation};
use crate::{Linter, Rule, Violation, text::trim_quotes};

use super::constraint_missing_not_valid::tables_created_in_transaction;

Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/rules/prefer_bigint_over_int.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::collections::HashSet;

use squawk_syntax::ast::AstNode;
use squawk_syntax::{ast, Parse, SourceFile};
use squawk_syntax::{Parse, SourceFile, ast};

use crate::{Linter, Rule, Violation};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::collections::HashSet;

use squawk_syntax::ast::AstNode;
use squawk_syntax::{ast, Parse, SourceFile};
use squawk_syntax::{Parse, SourceFile, ast};

use crate::{Linter, Rule, Violation};

Expand Down
2 changes: 1 addition & 1 deletion crates/squawk_linter/src/rules/prefer_identity.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use std::collections::HashSet;

use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{Linter, Rule, Violation};
Expand Down
4 changes: 2 additions & 2 deletions crates/squawk_linter/src/rules/prefer_robust_stmts.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use std::collections::HashMap;

use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{text::trim_quotes, Linter, Rule, Violation};
use crate::{Linter, Rule, Violation, text::trim_quotes};

#[derive(PartialEq)]
enum Constraint {
Expand Down
4 changes: 2 additions & 2 deletions crates/squawk_linter/src/rules/prefer_text_field.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use std::collections::HashSet;

use squawk_syntax::{
ast::{self, AstNode},
Parse, SourceFile,
ast::{self, AstNode},
};

use crate::{text::trim_quotes, Linter, Rule, Violation};
use crate::{Linter, Rule, Violation, text::trim_quotes};

use crate::visitors::check_not_allowed_types;

Expand Down
Loading
Loading