[shuffle] Move ast to new structure.

This CL moves the ast folder into the `lang/wgsl/ast` folder and
updates the includes. The namespaces and build groups are not updated in
this CL, just the code move.

Bug: tint:1988
Change-Id: Iff69e4d02f55d2c7f1fcd279715ddd81d3ede4b1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/142003
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/lang/wgsl/ast/variable.h b/src/tint/lang/wgsl/ast/variable.h
new file mode 100644
index 0000000..84393c52
--- /dev/null
+++ b/src/tint/lang/wgsl/ast/variable.h
@@ -0,0 +1,91 @@
+// 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_TINT_LANG_WGSL_AST_VARIABLE_H_
+#define SRC_TINT_LANG_WGSL_AST_VARIABLE_H_
+
+#include <utility>
+#include <vector>
+
+#include "src/tint/builtin/access.h"
+#include "src/tint/builtin/address_space.h"
+#include "src/tint/lang/wgsl/ast/attribute.h"
+#include "src/tint/lang/wgsl/ast/binding_attribute.h"
+#include "src/tint/lang/wgsl/ast/expression.h"
+#include "src/tint/lang/wgsl/ast/group_attribute.h"
+#include "src/tint/lang/wgsl/ast/type.h"
+
+// Forward declarations
+namespace tint::ast {
+class Identifier;
+class LocationAttribute;
+}  // namespace tint::ast
+
+namespace tint::ast {
+
+/// Variable is the base class for Var, Let, Const, Override and Parameter.
+///
+/// An instance of this class represents one of five constructs in WGSL: "var"  declaration, "let"
+/// declaration, "override" declaration, "const" declaration, or formal parameter to a function.
+///
+/// @see https://www.w3.org/TR/WGSL/#value-decls
+class Variable : public utils::Castable<Variable, Node> {
+  public:
+    /// Constructor
+    /// @param pid the identifier of the program that owns this node
+    /// @param nid the unique node identifier
+    /// @param src the variable source
+    /// @param name The struct member name
+    /// @param type the declared variable type
+    /// @param initializer the initializer expression
+    /// @param attributes the variable attributes
+    Variable(ProgramID pid,
+             NodeID nid,
+             const Source& src,
+             const Identifier* name,
+             Type type,
+             const Expression* initializer,
+             utils::VectorRef<const Attribute*> attributes);
+
+    /// Destructor
+    ~Variable() override;
+
+    /// @returns true if the variable has both group and binding attributes
+    bool HasBindingPoint() const {
+        return HasAttribute<BindingAttribute>(attributes) &&
+               HasAttribute<GroupAttribute>(attributes);
+    }
+
+    /// @returns the kind of the variable, which can be used in diagnostics
+    ///          e.g. "var", "let", "const", etc
+    virtual const char* Kind() const = 0;
+
+    /// The variable name
+    const Identifier* const name;
+
+    /// The declared variable type. This is null if the type is inferred, e.g.:
+    ///   let f = 1.0;
+    ///   var i = 1;
+    const Type type;
+
+    /// The initializer expression or nullptr if none set
+    const Expression* const initializer;
+
+    /// The attributes attached to this variable
+    const utils::Vector<const Attribute*, 2> attributes;
+};
+
+}  // namespace tint::ast
+
+#endif  // SRC_TINT_LANG_WGSL_AST_VARIABLE_H_