Delete Validator except public API

Now that all validation has been moved to the Resolver, we can delete
the Validator. This change removes everything except validator.h with
the public no-op API. We can remove this once we remove dependencies on
this public API in Dawn.

Bug: tint:642
Change-Id: I644cd900615509c9cdd57c375c6217a50126e36c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/47023
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/BUILD.gn b/src/BUILD.gn
index 901dd29..ca24a60 100644
--- a/src/BUILD.gn
+++ b/src/BUILD.gn
@@ -461,10 +461,7 @@
     "utils/hash.h",
     "utils/math.h",
     "utils/unique_vector.h",
-    "validator/validator.cc",
     "validator/validator.h",
-    "validator/validator_impl.cc",
-    "validator/validator_impl.h",
     "writer/append_vector.cc",
     "writer/append_vector.h",
     "writer/float_to_string.cc",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8216dba..909fc86 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -276,10 +276,7 @@
   utils/hash.h
   utils/math.h
   utils/unique_vector.h
-  validator/validator.cc
   validator/validator.h
-  validator/validator_impl.cc
-  validator/validator_impl.h
   writer/append_vector.cc
   writer/append_vector.h
   writer/float_to_string.cc
@@ -526,8 +523,6 @@
     utils/tmpfile_test.cc
     utils/tmpfile.h
     utils/unique_vector_test.cc
-    validator/validator_test_helper.cc
-    validator/validator_test_helper.h
     writer/append_vector_test.cc
     writer/float_to_string_test.cc
   )
diff --git a/src/validator/validator.cc b/src/validator/validator.cc
deleted file mode 100644
index c0e4aa8..0000000
--- a/src/validator/validator.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/validator/validator.h"
-
-#include "src/validator/validator_impl.h"
-
-namespace tint {
-
-Validator::Validator() = default;
-
-Validator::~Validator() = default;
-
-bool Validator::Validate(const Program* program) {
-  ValidatorImpl impl(program);
-  bool ret = impl.Validate();
-  diags_ = impl.diagnostics();
-  return ret;
-}
-
-}  // namespace tint
diff --git a/src/validator/validator.h b/src/validator/validator.h
index b6e6804..bbcaf69 100644
--- a/src/validator/validator.h
+++ b/src/validator/validator.h
@@ -17,29 +17,30 @@
 
 #include <string>
 
-#include "src/program.h"
+#include "src/diagnostic/diagnostic.h"
 
 namespace tint {
 
+class Program;
+
+// TODO(amaiorano): This class is deprecated. Delete after removing its usage in
+// Dawn.
 /// Determines if the program is complete and valid
 class Validator {
  public:
-  /// Constructor
-  Validator();
-  ~Validator();
-
   /// Runs the validator
   /// @param program the program to validate
   /// @returns true if the validation was successful
-  bool Validate(const Program* program);
+  bool Validate(const Program* program) {
+    (void)program;
+    return true;
+  }
 
   /// @returns error messages from the validator
-  std::string error() {
-    diag::Formatter formatter{{false, false, false, false}};
-    return formatter.format(diags_);
-  }
+  std::string error() { return {}; }
   /// @returns true if an error was encountered
-  bool has_error() const { return diags_.contains_errors(); }
+  bool has_error() const { return false; }
+
   /// @returns the full list of diagnostic messages.
   const diag::List& diagnostics() const { return diags_; }
 
diff --git a/src/validator/validator_impl.cc b/src/validator/validator_impl.cc
deleted file mode 100644
index 7d405fa..0000000
--- a/src/validator/validator_impl.cc
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/validator/validator_impl.h"
-
-#include <utility>
-
-#include "src/ast/call_statement.h"
-#include "src/ast/constant_id_decoration.h"
-#include "src/ast/fallthrough_statement.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/stage_decoration.h"
-#include "src/ast/stride_decoration.h"
-#include "src/ast/struct_block_decoration.h"
-#include "src/ast/struct_member_align_decoration.h"
-#include "src/ast/struct_member_offset_decoration.h"
-#include "src/ast/struct_member_size_decoration.h"
-#include "src/ast/uint_literal.h"
-#include "src/ast/workgroup_decoration.h"
-#include "src/semantic/call.h"
-#include "src/semantic/function.h"
-#include "src/semantic/variable.h"
-#include "src/type/alias_type.h"
-#include "src/type/array_type.h"
-#include "src/type/matrix_type.h"
-#include "src/type/pointer_type.h"
-#include "src/type/struct_type.h"
-#include "src/type/u32_type.h"
-#include "src/type/vector_type.h"
-#include "src/type/void_type.h"
-
-namespace tint {
-
-ValidatorImpl::ValidatorImpl(const Program* program) : program_(program) {}
-
-ValidatorImpl::~ValidatorImpl() = default;
-
-void ValidatorImpl::add_error(const Source& src,
-                              const char* code,
-                              const std::string& msg) {
-  diag::Diagnostic diag;
-  diag.severity = diag::Severity::Error;
-  diag.source = src;
-  diag.message = msg;
-  diag.code = code;
-  diags_.add(std::move(diag));
-}
-
-void ValidatorImpl::add_error(const Source& src, const std::string& msg) {
-  diags_.add_error(msg, src);
-}
-
-bool ValidatorImpl::Validate() {
-  if (!program_->IsValid()) {
-    // If we're attempting to validate an invalid program, fail with the
-    // program's diagnostics.
-    diags_.add(program_->Diagnostics());
-    return false;
-  }
-
-  // Validate global declarations in the order they appear in the module.
-  for (auto* decl : program_->AST().GlobalDeclarations()) {
-    if (decl->Is<type::Type>()) {
-      // Validated by Resolver (Struct types only)
-      return true;
-    } else if (auto* func = decl->As<ast::Function>()) {
-      current_function_ = func;
-      if (!ValidateFunction(func)) {
-        return false;
-      }
-      current_function_ = nullptr;
-    } else if (auto* var = decl->As<ast::Variable>()) {
-      if (!ValidateGlobalVariable(var)) {
-        return false;
-      }
-    } else {
-      TINT_UNREACHABLE(diags_);
-      return false;
-    }
-  }
-  if (!ValidateEntryPoint(program_->AST().Functions())) {
-    return false;
-  }
-
-  return true;
-}
-
-bool ValidatorImpl::ValidateGlobalVariable(const ast::Variable* var) {
-  variable_stack_.set_global(var->symbol(), var);
-  return true;
-}
-
-bool ValidatorImpl::ValidateEntryPoint(const ast::FunctionList&) {
-  return true;
-}
-
-bool ValidatorImpl::ValidateFunction(const ast::Function* func) {
-  // TODO(amaiorano): Remove ValidateFunction once we've moved all the statement
-  // validation to Resovler
-
-  variable_stack_.push_scope();
-  for (auto* param : func->params()) {
-    variable_stack_.set(param->symbol(), param);
-  }
-  if (!ValidateStatements(func->body())) {
-    return false;
-  }
-  variable_stack_.pop_scope();
-  return true;
-}
-
-bool ValidatorImpl::ValidateStatements(const ast::BlockStatement* block) {
-  if (!block) {
-    return false;
-  }
-
-  bool is_valid = true;
-  variable_stack_.push_scope();
-  for (auto* stmt : *block) {
-    if (!ValidateStatement(stmt)) {
-      is_valid = false;
-      break;
-    }
-  }
-  variable_stack_.pop_scope();
-
-  return is_valid;
-}
-
-bool ValidatorImpl::ValidateDeclStatement(
-    const ast::VariableDeclStatement* decl) {
-  auto symbol = decl->variable()->symbol();
-  variable_stack_.set(symbol, decl->variable());
-  return true;
-}
-
-bool ValidatorImpl::ValidateStatement(const ast::Statement* stmt) {
-  if (!stmt) {
-    return false;
-  }
-  if (auto* v = stmt->As<ast::VariableDeclStatement>()) {
-    return ValidateDeclStatement(v);
-  }
-  if (auto* s = stmt->As<ast::SwitchStatement>()) {
-    return ValidateSwitch(s);
-  }
-  if (auto* c = stmt->As<ast::CaseStatement>()) {
-    return ValidateCase(c);
-  }
-  if (auto* b = stmt->As<ast::BlockStatement>()) {
-    return ValidateStatements(b);
-  }
-  return true;
-}
-
-bool ValidatorImpl::ValidateSwitch(const ast::SwitchStatement* s) {
-  // TODO(amaiorano): Switch validation has moved to Resolver, but we need this
-  // logic to validate case statements for now. Remove once ValidateStatement()
-  // can be removed.
-  for (auto* case_stmt : s->body()) {
-    if (!ValidateStatement(case_stmt)) {
-      return false;
-    }
-  }
-  return true;
-}
-
-bool ValidatorImpl::ValidateCase(const ast::CaseStatement* c) {
-  if (!ValidateStatement(c->body())) {
-    return false;
-  }
-  return true;
-}
-
-}  // namespace tint
diff --git a/src/validator/validator_impl.h b/src/validator/validator_impl.h
deleted file mode 100644
index 45d92d8..0000000
--- a/src/validator/validator_impl.h
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef SRC_VALIDATOR_VALIDATOR_IMPL_H_
-#define SRC_VALIDATOR_VALIDATOR_IMPL_H_
-
-#include <string>
-#include <unordered_set>
-
-#include "src/ast/assignment_statement.h"
-#include "src/ast/identifier_expression.h"
-#include "src/ast/module.h"
-#include "src/ast/return_statement.h"
-#include "src/ast/switch_statement.h"
-#include "src/ast/variable_decl_statement.h"
-#include "src/program.h"
-#include "src/scope_stack.h"
-
-namespace tint {
-
-/// Determines if the program is complete and valid
-class ValidatorImpl {
- public:
-  /// Constructor
-  /// @param program the program to validate
-  explicit ValidatorImpl(const Program* program);
-  ~ValidatorImpl();
-
-  /// Runs the validator
-  /// @returns true if the validation was successful
-  bool Validate();
-
-  /// @returns the program being validated
-  const Program* program() { return program_; }
-
-  /// @returns the diagnostic messages
-  const diag::List& diagnostics() const { return diags_; }
-  /// @returns the diagnostic messages
-  diag::List& diagnostics() { return diags_; }
-
-  /// @returns error messages from the validator
-  std::string error() {
-    diag::Formatter formatter{{false, false, false, false}};
-    return formatter.format(diags_);
-  }
-  /// @returns true if an error was encountered
-  bool has_error() const { return diags_.contains_errors(); }
-
-  /// Appends an error at `src` with the code `code` and message `msg`
-  /// @param src the source causing the error
-  /// @param code the validation error code
-  /// @param msg the error message
-  void add_error(const Source& src, const char* code, const std::string& msg);
-
-  /// Appends an error at `src` with the message `msg`
-  /// @param src the source causing the error
-  /// @param msg the error message
-  void add_error(const Source& src, const std::string& msg);
-
-  /// Validates a global variable
-  /// @param var the global variable to check
-  /// @returns true if the validation was successful
-  bool ValidateGlobalVariable(const ast::Variable* var);
-  /// Validates a function
-  /// @param func the function to check
-  /// @returns true if the validation was successful
-  bool ValidateFunction(const ast::Function* func);
-  /// Validates a block of statements
-  /// @param block the statements to check
-  /// @returns true if the validation was successful
-  bool ValidateStatements(const ast::BlockStatement* block);
-  /// Validates a statement
-  /// @param stmt the statement to check
-  /// @returns true if the validation was successful
-  bool ValidateStatement(const ast::Statement* stmt);
-  /// Validates declaration name uniqueness
-  /// @param decl is the new declaration to be added
-  /// @returns true if no previous declaration with the `decl` 's name
-  /// exist in the variable stack
-  bool ValidateDeclStatement(const ast::VariableDeclStatement* decl);
-  /// Validates switch statements
-  /// @param s the switch statement to check
-  /// @returns true if the valdiation was successful
-  bool ValidateSwitch(const ast::SwitchStatement* s);
-  /// Validates case statements
-  /// @param c the case statement to check
-  /// @returns true if the valdiation was successful
-  bool ValidateCase(const ast::CaseStatement* c);
-  /// Validates entry points
-  /// @param funcs the functions to check
-  /// @returns true if the valdiation was successful
-  bool ValidateEntryPoint(const ast::FunctionList& funcs);
-
-  /// Testing method to inserting a given variable into the current scope.
-  /// @param var the variable to register
-  void RegisterVariableForTesting(ast::Variable* var) {
-    variable_stack_.set(var->symbol(), var);
-  }
-
- private:
-  const Program* program_;
-  diag::List diags_;
-  ScopeStack<const ast::Variable*> variable_stack_;
-  ast::Function* current_function_ = nullptr;
-};
-
-}  // namespace tint
-
-#endif  // SRC_VALIDATOR_VALIDATOR_IMPL_H_
diff --git a/src/validator/validator_test_helper.cc b/src/validator/validator_test_helper.cc
deleted file mode 100644
index 2efa3b9..0000000
--- a/src/validator/validator_test_helper.cc
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/validator/validator_test_helper.h"
-
-namespace tint {
-
-ValidatorTestHelper::ValidatorTestHelper() = default;
-
-ValidatorTestHelper::~ValidatorTestHelper() = default;
-
-}  // namespace tint
diff --git a/src/validator/validator_test_helper.h b/src/validator/validator_test_helper.h
deleted file mode 100644
index 36e49a5..0000000
--- a/src/validator/validator_test_helper.h
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef SRC_VALIDATOR_VALIDATOR_TEST_HELPER_H_
-#define SRC_VALIDATOR_VALIDATOR_TEST_HELPER_H_
-
-#include <memory>
-#include <utility>
-#include <vector>
-
-#include "gtest/gtest.h"
-#include "src/program_builder.h"
-#include "src/semantic/expression.h"
-#include "src/validator/validator_impl.h"
-
-namespace tint {
-
-/// A helper for testing validation
-class ValidatorTestHelper : public ProgramBuilder {
- public:
-  /// Constructor
-  ValidatorTestHelper();
-  ~ValidatorTestHelper() override;
-
-  /// Builds and returns a validator from the program.
-  /// @note The validator is only built once. Multiple calls to Build() will
-  /// return the same ValidatorImpl without rebuilding.
-  /// @return the built validator
-  ValidatorImpl& Build() {
-    if (val_) {
-      return *val_;
-    }
-    program_ = std::make_unique<Program>(std::move(*this));
-    [&]() {
-      ASSERT_TRUE(program_->IsValid())
-          << diag::Formatter().format(program_->Diagnostics());
-    }();
-    val_ = std::make_unique<ValidatorImpl>(program_.get());
-    for (auto* var : vars_for_testing_) {
-      val_->RegisterVariableForTesting(var);
-    }
-    return *val_;
-  }
-
-  /// Inserts a variable into the current scope.
-  /// @param var the variable to register.
-  void RegisterVariable(ast::Variable* var) {
-    AST().AddGlobalVariable(var);
-    vars_for_testing_.emplace_back(var);
-  }
-
-  /// Helper for returning the resolved semantic type of the expression `expr`
-  /// from the built program.
-  /// @param expr the AST expression
-  /// @return the resolved semantic type for the expression, or nullptr if the
-  /// expression has no resolved type.
-  type::Type* TypeOf(ast::Expression* expr) const {
-    auto* sem = program_->Sem().Get(expr);
-    return sem ? sem->Type() : nullptr;
-  }
-
- private:
-  std::unique_ptr<Program> program_;
-  std::unique_ptr<ValidatorImpl> val_;
-  std::vector<ast::Variable*> vars_for_testing_;
-};
-
-}  // namespace tint
-
-#endif  // SRC_VALIDATOR_VALIDATOR_TEST_HELPER_H_
diff --git a/test/BUILD.gn b/test/BUILD.gn
index 69f1017..6dd4ed2 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -226,8 +226,6 @@
     "../src/utils/tmpfile.h",
     "../src/utils/tmpfile_test.cc",
     "../src/utils/unique_vector_test.cc",
-    "../src/validator/validator_test_helper.cc",
-    "../src/validator/validator_test_helper.h",
     "../src/writer/append_vector_test.cc",
     "../src/writer/float_to_string_test.cc",
   ]