Title: Sanity Checker · Issue #73 · rowscript/rowscript · GitHub
Open Graph Title: Sanity Checker · Issue #73 · rowscript/rowscript
X Title: Sanity Checker · Issue #73 · rowscript/rowscript
Description: Let's have sth like: use std::collections::HashMap; use crate::theory::abs::data::{MetaKind, Term}; use crate::theory::{Name, Var}; pub struct UnusedParamAnalyzer<'a> { parameters: HashMap
Open Graph Description: Let's have sth like: use std::collections::HashMap; use crate::theory::abs::data::{MetaKind, Term}; use crate::theory::{Name, Var}; pub struct UnusedParamAnalyzer<'a> { parameters: HashMap X Description: Let's have sth like: use std::collections::HashMap; use crate::theory::abs::data::{MetaKind, Term}; use crate::theory::{Name, Var}; pub struct UnusedParamAnalyzer<'a> { parameters: Ha...
Opengraph URL: https://github.com/rowscript/rowscript/issues/73
X: @github
Domain: github.com
Links:
Viewport: width=device-width
Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Sanity Checker","articleBody":"Let's have sth like:\r\n```rust\r\nuse std::collections::HashMap;\r\nuse crate::theory::abs::data::{MetaKind, Term};\r\nuse crate::theory::{Name, Var};\r\n\r\npub struct UnusedParamAnalyzer\u003c'a> {\r\n parameters: HashMap\u003cName, (&'a Term, bool)>,\r\n unused: Vec\u003c(Name, &'a Term)>,\r\n}\r\n\r\nimpl\u003c'a> UnusedParamAnalyzer\u003c'a> {\r\n pub fn new() -> Self {\r\n UnusedParamAnalyzer {\r\n parameters: HashMap::new(),\r\n unused: Vec::new(),\r\n }\r\n }\r\n\r\n pub fn with_binding\u003cF>(&mut self, name: Name, term: &'a Term, mut continuation: F) where F: FnMut(&mut Self) {\r\n let backup = self.parameters.insert(name.clone(), (term, false));\r\n continuation(self);\r\n let released = if let Some(backup) = backup {\r\n self.parameters.insert(name.clone(), backup)\r\n } else {\r\n self.parameters.remove(&name)\r\n };\r\n match released {\r\n Some((term, flag)) => {\r\n if !flag {\r\n self.unused.push((name, term));\r\n }\r\n },\r\n _ => unreachable!(\"must have been inserted in this scope\"),\r\n }\r\n }\r\n\r\n pub fn mark_used(&mut self, name: Name) {\r\n if let Some((_, flag)) = self.parameters.get_mut(&name) {\r\n *flag = true;\r\n }\r\n }\r\n // term is the term that binds the variable\r\n pub fn analyze(&mut self, term: &'a Term) {\r\n match term {\r\n Term::Ref(var) => {\r\n self.mark_used(var.name.clone());\r\n }\r\n Term::Qualified(_, _) => {\r\n // qualified does not contribute to local used variables\r\n }\r\n Term::Extern(_) => {}\r\n Term::MetaRef(kind, y, z) => {\r\n // TODO: check if this is correct\r\n if let MetaKind::UserMeta = kind {\r\n self.mark_used(y.name.clone());\r\n }\r\n for (_, t) in z {\r\n self.analyze(t);\r\n }\r\n }\r\n Term::Undef(_var) => {\r\n // undef does not contribute to used variables\r\n }\r\n Term::Let(param, val, body) => {\r\n self.analyze(¶m.typ);\r\n self.analyze(val);\r\n self.with_binding(param.var.name.clone(), term, |this| {\r\n this.analyze(body);\r\n });\r\n }\r\n Term::Univ => {}\r\n Term::Pi(param, body) => {\r\n self.analyze(¶m.typ);\r\n self.with_binding(param.var.name.clone(), term, |this| {\r\n this.analyze(body);\r\n });\r\n }\r\n Term::Lam(param, body) => {\r\n self.analyze(¶m.typ);\r\n self.with_binding(param.var.name.clone(), term, |this| {\r\n this.analyze(body);\r\n });\r\n }\r\n Term::App(x, _, y) => {\r\n self.analyze(x);\r\n self.analyze(y);\r\n }\r\n Term::Sigma(param, body) => {\r\n self.analyze(¶m.typ);\r\n self.with_binding(param.var.name.clone(), term, |this| {\r\n this.analyze(body);\r\n });\r\n }\r\n Term::Tuple(x, y) => {\r\n self.analyze(x);\r\n self.analyze(y);\r\n }\r\n Term::TupleLet(x, y, expr, body) => {\r\n self.analyze(&x.typ);\r\n self.analyze(&y.typ);\r\n self.analyze(expr);\r\n // can be dependent tuple\r\n self.with_binding(x.var.name.clone(), term, |this| {\r\n this.with_binding(y.var.name.clone(), term, |this| {\r\n this.analyze(body);\r\n });\r\n });\r\n }\r\n Term::Unit => {}\r\n Term::TT => {}\r\n Term::UnitLet(_, body) => {\r\n self.analyze(body);\r\n }\r\n Term::Boolean => {}\r\n Term::False => {}\r\n Term::True => {}\r\n Term::If(x, y, z) => {\r\n self.analyze(x);\r\n self.analyze(y);\r\n self.analyze(z);\r\n }\r\n Term::String => {\r\n }\r\n Term::Str(_) => {}\r\n Term::Number => {}\r\n Term::Num(_) => {}\r\n Term::NumAdd(x, y) => {\r\n self.analyze(x);\r\n self.analyze(y);\r\n }\r\n Term::NumSub(x, y) => {\r\n self.analyze(x);\r\n self.analyze(y);\r\n }\r\n Term::BigInt => {}\r\n Term::Big(_) => {}\r\n Term::Row => {}\r\n Term::Fields(x) => {\r\n for (_, t) in x {\r\n self.analyze(t);\r\n }\r\n }\r\n Term::Combine(x, y) => {\r\n self.analyze(x);\r\n self.analyze(y);\r\n }\r\n Term::RowOrd(x, _, y) => {\r\n self.analyze(x);\r\n self.analyze(y);\r\n }\r\n Term::RowSat => {}\r\n Term::RowEq(x, y) => {\r\n self.analyze(x);\r\n self.analyze(y);\r\n }\r\n Term::RowRefl => {}\r\n Term::Object(x) => {\r\n self.analyze(x);\r\n }\r\n Term::Obj(x) => {\r\n self.analyze(x);\r\n }\r\n Term::Concat(x, y) => {\r\n self.analyze(x);\r\n self.analyze(y);\r\n }\r\n Term::Access(x, _) => {\r\n self.analyze(x);\r\n }\r\n Term::Downcast(x, y) => {\r\n self.analyze(x);\r\n self.analyze(y);\r\n }\r\n Term::Enum(x) => {\r\n self.analyze(x);\r\n }\r\n Term::Variant(x) => {\r\n self.analyze(x);\r\n }\r\n Term::Upcast(x, y) => {\r\n self.analyze(x);\r\n self.analyze(y);\r\n }\r\n Term::Switch(x, map) => {\r\n self.analyze(x);\r\n for (_, (var, body)) in map {\r\n self.with_binding(var.name.clone(), term, |this| {\r\n this.analyze(body);\r\n });\r\n }\r\n }\r\n Term::Vptr(var, terms) => {\r\n self.mark_used(var.name.clone());\r\n for t in terms {\r\n self.analyze(t);\r\n }\r\n }\r\n Term::Vp(_, terms) => {\r\n for t in terms {\r\n self.analyze(t);\r\n }\r\n }\r\n Term::Lookup(x) => {\r\n self.analyze(x);\r\n }\r\n Term::Find(x, a, b) => {\r\n self.mark_used(a.name.clone());\r\n self.mark_used(b.name.clone());\r\n self.analyze(x);\r\n }\r\n Term::ImplementsOf(x, var) => {\r\n self.mark_used(var.name.clone());\r\n self.analyze(x);\r\n }\r\n Term::ImplementsSat => {\r\n }\r\n }\r\n }\r\n pub fn finalize(self) -> Vec\u003c(Name, &'a Term)> {\r\n self.unused\r\n }\r\n}\r\n```","author":{"url":"https://github.com/SchrodingerZhu","@type":"Person","name":"SchrodingerZhu"},"datePublished":"2023-04-30T01:56:52Z","url":"https://github.com/rowscript/rowscript/issues/73"}
react-profiling 0 react-import-map react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf route-pattern /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) route-controller voltron_issues_fragments route-action issue_layout fetch-nonce v2:eb891b12-b6fd-5bc6-60c7-e289b5b153e1 current-catalog-service-hash 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 request-id 86B4:230846:FE6BED:166E26A:6AFA1145 html-safe-nonce a42b9e54db1332d16c55a254d0eecb8483bb589ea7ca4cb19405be342e9776ac visitor-payload eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4NkI0OjIzMDg0NjpGRTZCRUQ6MTY2RTI2QTo2QUZBMTE0NSIsInZpc2l0b3JfaWQiOiIzNTU3NjQ0Nzc3NDE3MjE2MzI1IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= visitor-hmac dd13c9c29db0275212d44c842f5796bd7d3b0ec7f3e8b09e810f724e2d2a0d5e hovercard-subject-tag issue:1689746209 github-keyboard-shortcuts repository,issues,copilot google-site-verification Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I octolytics-url https://collector.github.com/github/collect analytics-location / fb:app_id 1401488693436528 apple-itunes-app app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/rowscript/rowscript/73/issue_layout twitter:image https://opengraph.githubassets.com/76223b9bf81e8d12ba4e00d09c1190291b7ec7d550995a4ec21cf0d0e7266b08/rowscript/rowscript/issues/73 twitter:card summary_large_image og:image https://opengraph.githubassets.com/76223b9bf81e8d12ba4e00d09c1190291b7ec7d550995a4ec21cf0d0e7266b08/rowscript/rowscript/issues/73 og:image:alt Let's have sth like: use std::collections::HashMap; use crate::theory::abs::data::{MetaKind, Term}; use crate::theory::{Name, Var}; pub struct UnusedParamAnalyzer<'a> { parameters: HashMap og:image:width 1200 og:image:height 600 og:site_name GitHub og:type object og:author:username SchrodingerZhu hostname github.com expected-hostname github.com None 612d3e6ffd693e7ea8d9fcf452370995872baef31d825b1fedef704cd3d24ac7 turbo-cache-control no-preview go-import github.com/rowscript/rowscript git https://github.com/rowscript/rowscript.git octolytics-dimension-user_id 87884599 octolytics-dimension-user_login rowscript octolytics-dimension-repository_id 388972006 octolytics-dimension-repository_nwo rowscript/rowscript octolytics-dimension-repository_public true octolytics-dimension-repository_is_fork false octolytics-dimension-repository_network_root_id 388972006 octolytics-dimension-repository_network_root_nwo rowscript/rowscript turbo-body-classes logged-out env-production page-responsive disable-turbo false browser-stats-url https://api.github.com/_private/browser/stats browser-errors-url https://api.github.com/_private/browser/errors release 072e34035c13c31543fba9f025cbbbda4210dae4 ui-target full theme-color #1e2327 color-scheme light dark react-app-name issues
URLs of crawlers that visited me.