Can't find my SWEP in the Q menu

Hello, I am trying to paste my Scripted weapon into GMod but I can’t find it anywhere. Btw, I am a newbie to lua coding.
This is what it looks like:

[lua]if (SERVER) then

 AddCSLuaFile()
 
 SWEP.HoldType            = "physgun"

end

if (CLIENT) then

 SWEP.Instructions        = "test"
 SWEP.Purpose             = "test"
 SWEP.Author              = "test"
 SWEP.Contact             = "test"
   
 SWEP.ViewModelFlip       = false
 
 SWEP.DrawCrosshair       = true
 
 SWEP.Spawnable           = true
 SWEP.AdminSpawnable      = true
 SWEP.Category            = "Other"
 
 SWEP.ShowViewModel       = true
 SWEP.ShowWorldModel      = true
 SWEP.ViewModelBoneMods   = {
   ["Handle"] = { scale = Vector(1, 1, 1), pos = Vector(0, 0, 0), angle = Angle(-19.049, -7.619, 19.048) }
 }
 *
 
 killicon.AddFont( "weapon_physcannon", "HL2MPTypeDeath", "-", Color( 255,80,0,255 ) )
 
 SWEP.VElements = {
["4"] = { type = "Model", model = "models/props_c17/oildrum001.mdl", bone = "Base", rel = "", pos = Vector(0.455, 1.399, 15.909), angle = Angle(-180, 129.886, -1.024), size = Vector(0.349, 0.349, 0.349), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/stasisshield_sheet", skin = 0, bodygroup = {} },
["3+"] = { type = "Model", model = "models/gibs/gunship_gibs_nosegun.mdl", bone = "Base", rel = "", pos = Vector(5.908, 0.455, 4.091), angle = Angle(88.976, 148.294, -99.206), size = Vector(0.264, 0.264, 0.264), color = Color(255, 255, 255, 255), surpresslightning = false, material = "phoenix_storms/metalset_1-2", skin = 0, bodygroup = {} },
["1+"] = { type = "Model", model = "models/props_c17/canister01a.mdl", bone = "Base", rel = "", pos = Vector(1.363, -3.182, 0.455), angle = Angle(-1.024, 1.023, -3.069), size = Vector(0.209, 0.209, 0.209), color = Color(214, 167, 146, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} },
["1"] = { type = "Model", model = "models/props_c17/canister01a.mdl", bone = "Base", rel = "", pos = Vector(-0.456, -3.182, 0.455), angle = Angle(-1.024, 1.023, -3.069), size = Vector(0.209, 0.209, 0.209), color = Color(214, 167, 146, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} },
["2"] = { type = "Model", model = "models/props_c17/gaspipes006a.mdl", bone = "Base", rel = "", pos = Vector(-6.818, 5.908, -7.728), angle = Angle(-91.024, 150.341, 95.113), size = Vector(0.435, 0.435, 0.435), color = Color(100, 100, 100, 255), surpresslightning = false, material = "environment maps/pipemetal001a", skin = 0, bodygroup = {} },
["2+"] = { type = "Model", model = "models/props_c17/gaspipes006a.mdl", bone = "Base", rel = "", pos = Vector(7.3, 6.5, -7.728), angle = Angle(-91.024, 150.341, 27.614), size = Vector(0.435, 0.435, 0.435), color = Color(100, 100, 100, 255), surpresslightning = false, material = "environment maps/pipemetal001a", skin = 0, bodygroup = {} }
 }
 *
 SWEP.WElements = {
["4"] = { type = "Model", model = "models/props_c17/oildrum001.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(12.272, -1, -5), angle = Angle(-93.069, -19.432, -29.66), size = Vector(0.264, 0.264, 0.264), color = Color(255, 255, 255, 255), surpresslightning = false, material = "models/props_combine/stasisshield_sheet", skin = 0, bodygroup = {} },
["1"] = { type = "Model", model = "models/props_c17/canister02a.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(12, -3.182, -8.301), angle = Angle(-93.069, 9.204, -1.024), size = Vector(0.151, 0.151, 0.151), color = Color(188, 137, 82, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} },
["1+"] = { type = "Model", model = "models/props_c17/canister02a.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(12.272, -1.364, -8.801), angle = Angle(-93.069, 9.204, -1.024), size = Vector(0.151, 0.151, 0.151), color = Color(195, 149, 82, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} },
["3"] = { type = "Model", model = "models/gibs/gunship_gibs_nosegun.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(20.454, 1.363, -6.818), angle = Angle(-3.069, 11.25, -29.66), size = Vector(0.209, 0.209, 0.209), color = Color(255, 255, 255, 255), surpresslightning = false, material = "phoenix_storms/metalset_1-2", skin = 0, bodygroup = {} },
["2"] = { type = "Model", model = "models/props_c17/gaspipes006a.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(8.635, 1.363, -0.456), angle = Angle(178.977, 37.84, -13.296), size = Vector(0.321, 0.321, 0.321), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} },
["2+"] = { type = "Model", model = "models/props_c17/gaspipes006a.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(8.635, -0.456, -0), angle = Angle(170.794, 1.023, -15.341), size = Vector(0.321, 0.321, 0.321), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} }
 }
 *

end

SWEP.Base = “”

SWEP.ViewModel = “models/weapons/v_physcannon.mdl”
SWEP.WorldModel = “models/weapons/w_physics.mdl”

SWEP.ViewModelFOV = 58.503937007874

SWEP.Primary.Recoil = 5
SWEP.Primary.Damage = 10
SWEP.Primary.NumShots = 4
SWEP.Primary.Delay = 1.0

SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = SWEP.Primary.ClipSize
SWEP.Primary.Automatic = true

SWEP.Primary.Cone = 0.04
SWEP.Primary.ConeMoving = 0.07
SWEP.Primary.ConeCrouching = 0.025

SWEP.MuzzleEffect = “silenced”
SWEP.ShellEffect = “none”

SWEP.WeaponType = “primary”

SWEP.IronSightsPos = Vector(0.319, -1.811, 0.239)
SWEP.IronSightsAng = Vector(1.929, 0.827, -0.276)

local ShootSound = Sound(“NPC_combine_gunship.gunship_weapon_fire_loop6”)

/----------------------
Initialize
-----------------------
/
function SWEP:Initialize()

if SERVER then
	self:SetWeaponHoldType(self.HoldType)
end

self.Charging = false

end

/----------------------
Reload
----------------------
/
function SWEP.Reload()

end

/----------------------
Secondary
----------------------
/
function SWEP.SecondaryAttack

 self.Weapon:SetNextSecondaryFire( CurTime() + self.Primary.Delay)
 self.Weapon:SetNextPrimaryFire(CurTime() + self.Primary.Delay)
 
 if not self.CanPrimaryAttack() then return end

 self.Weapon:EmitSound(self.Primary.Sound)
 self.TakePrimaryAmmo(1)	

 self:ShootStriderBullet(self.Primary.Damage,
 self.Primary.NumShots,	 
 self.Primary.Recoil,
 self.Primary.Cone)

end

/----------------------
Base Code
----------------------
/
function SWEP:Initialize()

// other initialize code goes here

if CLIENT then

	// Create a new table for every weapon instance
	self.VElements = table.FullCopy( self.VElements )
	self.WElements = table.FullCopy( self.WElements )
	self.ViewModelBoneMods = table.FullCopy( self.ViewModelBoneMods )

	self:CreateModels(self.VElements) // create viewmodels
	self:CreateModels(self.WElements) // create worldmodels

	// init view model bone build function
	if IsValid(self.Owner) then
		local vm = self.Owner:GetViewModel()
		if IsValid(vm) then
			self:ResetBonePositions(vm)

			// Init viewmodel visibility
			if (self.ShowViewModel == nil or self.ShowViewModel) then
				vm:SetColor(Color(255,255,255,255))
			else
				// we set the alpha to 1 instead of 0 because else ViewModelDrawn stops being called
				vm:SetColor(Color(255,255,255,1))
				// ^ stopped working in GMod 13 because you have to do Entity:SetRenderMode(1) for translucency to kick in
				// however for some reason the view model resets to render mode 0 every frame so we just apply a debug material to prevent it from drawing
				vm:SetMaterial("Debug/hsv")			
			end
		end
	end

end

end

function SWEP:Holster()

if CLIENT and IsValid(self.Owner) then
	local vm = self.Owner:GetViewModel()
	if IsValid(vm) then
		self:ResetBonePositions(vm)
	end
end

return true

end

function SWEP:OnRemove()
self:Holster()
end

if CLIENT then

SWEP.vRenderOrder = nil
function SWEP:ViewModelDrawn()

	local vm = self.Owner:GetViewModel()
	if !IsValid(vm) then return end

	if (!self.VElements) then return end

	self:UpdateBonePositions(vm)

	if (!self.vRenderOrder) then

		// we build a render order because sprites need to be drawn after models
		self.vRenderOrder = {}

		for k, v in pairs( self.VElements ) do
			if (v.type == "Model") then
				table.insert(self.vRenderOrder, 1, k)
			elseif (v.type == "Sprite" or v.type == "Quad") then
				table.insert(self.vRenderOrder, k)
			end
		end

	end

	for k, name in ipairs( self.vRenderOrder ) do

		local v = self.VElements[name]
		if (!v) then self.vRenderOrder = nil break end
		if (v.hide) then continue end

		local model = v.modelEnt
		local sprite = v.spriteMaterial

		if (!v.bone) then continue end

		local pos, ang = self:GetBoneOrientation( self.VElements, v, vm )

		if (!pos) then continue end

		if (v.type == "Model" and IsValid(model)) then

			model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z )
			ang:RotateAroundAxis(ang:Up(), v.angle.y)
			ang:RotateAroundAxis(ang:Right(), v.angle.p)
			ang:RotateAroundAxis(ang:Forward(), v.angle.r)

			model:SetAngles(ang)
			//model:SetModelScale(v.size)
			local matrix = Matrix()
			matrix:Scale(v.size)
			model:EnableMatrix( "RenderMultiply", matrix )

			if (v.material == "") then
				model:SetMaterial("")
			elseif (model:GetMaterial() != v.material) then
				model:SetMaterial( v.material )
			end

			if (v.skin and v.skin != model:GetSkin()) then
				model:SetSkin(v.skin)
			end

			if (v.bodygroup) then
				for k, v in pairs( v.bodygroup ) do
					if (model:GetBodygroup(k) != v) then
						model:SetBodygroup(k, v)
					end
				end
			end

			if (v.surpresslightning) then
				render.SuppressEngineLighting(true)
			end

			render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255)
			render.SetBlend(v.color.a/255)
			model:DrawModel()
			render.SetBlend(1)
			render.SetColorModulation(1, 1, 1)

			if (v.surpresslightning) then
				render.SuppressEngineLighting(false)
			end

		elseif (v.type == "Sprite" and sprite) then

			local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
			render.SetMaterial(sprite)
			render.DrawSprite(drawpos, v.size.x, v.size.y, v.color)

		elseif (v.type == "Quad" and v.draw_func) then

			local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
			ang:RotateAroundAxis(ang:Up(), v.angle.y)
			ang:RotateAroundAxis(ang:Right(), v.angle.p)
			ang:RotateAroundAxis(ang:Forward(), v.angle.r)

			cam.Start3D2D(drawpos, ang, v.size)
				v.draw_func( self )
			cam.End3D2D()

		end

	end

end

SWEP.wRenderOrder = nil
function SWEP:DrawWorldModel()

	if (self.ShowWorldModel == nil or self.ShowWorldModel) then
		self:DrawModel()
	end

	if (!self.WElements) then return end

	if (!self.wRenderOrder) then

		self.wRenderOrder = {}

		for k, v in pairs( self.WElements ) do
			if (v.type == "Model") then
				table.insert(self.wRenderOrder, 1, k)
			elseif (v.type == "Sprite" or v.type == "Quad") then
				table.insert(self.wRenderOrder, k)
			end
		end

	end

	if (IsValid(self.Owner)) then
		bone_ent = self.Owner
	else
		// when the weapon is dropped
		bone_ent = self
	end

	for k, name in pairs( self.wRenderOrder ) do

		local v = self.WElements[name]
		if (!v) then self.wRenderOrder = nil break end
		if (v.hide) then continue end

		local pos, ang

		if (v.bone) then
			pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent )
		else
			pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent, "ValveBiped.Bip01_R_Hand" )
		end

		if (!pos) then continue end

		local model = v.modelEnt
		local sprite = v.spriteMaterial

		if (v.type == "Model" and IsValid(model)) then

			model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z )
			ang:RotateAroundAxis(ang:Up(), v.angle.y)
			ang:RotateAroundAxis(ang:Right(), v.angle.p)
			ang:RotateAroundAxis(ang:Forward(), v.angle.r)

			model:SetAngles(ang)
			//model:SetModelScale(v.size)
			local matrix = Matrix()
			matrix:Scale(v.size)
			model:EnableMatrix( "RenderMultiply", matrix )

			if (v.material == "") then
				model:SetMaterial("")
			elseif (model:GetMaterial() != v.material) then
				model:SetMaterial( v.material )
			end

			if (v.skin and v.skin != model:GetSkin()) then
				model:SetSkin(v.skin)
			end

			if (v.bodygroup) then
				for k, v in pairs( v.bodygroup ) do
					if (model:GetBodygroup(k) != v) then
						model:SetBodygroup(k, v)
					end
				end
			end

			if (v.surpresslightning) then
				render.SuppressEngineLighting(true)
			end

			render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255)
			render.SetBlend(v.color.a/255)
			model:DrawModel()
			render.SetBlend(1)
			render.SetColorModulation(1, 1, 1)

			if (v.surpresslightning) then
				render.SuppressEngineLighting(false)
			end

		elseif (v.type == "Sprite" and sprite) then

			local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
			render.SetMaterial(sprite)
			render.DrawSprite(drawpos, v.size.x, v.size.y, v.color)

		elseif (v.type == "Quad" and v.draw_func) then

			local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
			ang:RotateAroundAxis(ang:Up(), v.angle.y)
			ang:RotateAroundAxis(ang:Right(), v.angle.p)
			ang:RotateAroundAxis(ang:Forward(), v.angle.r)

			cam.Start3D2D(drawpos, ang, v.size)
				v.draw_func( self )
			cam.End3D2D()

		end

	end

end

function SWEP:GetBoneOrientation( basetab, tab, ent, bone_override )

	local bone, pos, ang
	if (tab.rel and tab.rel != "") then

		local v = basetab[tab.rel]

		if (!v) then return end

		// Technically, if there exists an element with the same name as a bone
		// you can get in an infinite loop. Let's just hope nobody's that stupid.
		pos, ang = self:GetBoneOrientation( basetab, v, ent )

		if (!pos) then return end

		pos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
		ang:RotateAroundAxis(ang:Up(), v.angle.y)
		ang:RotateAroundAxis(ang:Right(), v.angle.p)
		ang:RotateAroundAxis(ang:Forward(), v.angle.r)

	else

		bone = ent:LookupBone(bone_override or tab.bone)

		if (!bone) then return end

		pos, ang = Vector(0,0,0), Angle(0,0,0)
		local m = ent:GetBoneMatrix(bone)
		if (m) then
			pos, ang = m:GetTranslation(), m:GetAngles()
		end

		if (IsValid(self.Owner) and self.Owner:IsPlayer() and 
			ent == self.Owner:GetViewModel() and self.ViewModelFlip) then
			ang.r = -ang.r // Fixes mirrored models
		end

	end

	return pos, ang
end

function SWEP:CreateModels( tab )

	if (!tab) then return end

	// Create the clientside models here because Garry says we can't do it in the render hook
	for k, v in pairs( tab ) do
		if (v.type == "Model" and v.model and v.model != "" and (!IsValid(v.modelEnt) or v.createdModel != v.model) and 
				string.find(v.model, ".mdl") and file.Exists (v.model, "GAME") ) then

			v.modelEnt = ClientsideModel(v.model, RENDER_GROUP_VIEW_MODEL_OPAQUE)
			if (IsValid(v.modelEnt)) then
				v.modelEnt:SetPos(self:GetPos())
				v.modelEnt:SetAngles(self:GetAngles())
				v.modelEnt:SetParent(self)
				v.modelEnt:SetNoDraw(true)
				v.createdModel = v.model
			else
				v.modelEnt = nil
			end

		elseif (v.type == "Sprite" and v.sprite and v.sprite != "" and (!v.spriteMaterial or v.createdSprite != v.sprite) 
			and file.Exists ("materials/"..v.sprite..".vmt", "GAME")) then

			local name = v.sprite.."-"
			local params = { ["$basetexture"] = v.sprite }
			// make sure we create a unique name based on the selected options
			local tocheck = { "nocull", "additive", "vertexalpha", "vertexcolor", "ignorez" }
			for i, j in pairs( tocheck ) do
				if (v[j]) then
					params["$"..j] = 1
					name = name.."1"
				else
					name = name.."0"
				end
			end

			v.createdSprite = v.sprite
			v.spriteMaterial = CreateMaterial(name,"UnlitGeneric",params)

		end
	end

end

local allbones
local hasGarryFixedBoneScalingYet = false

function SWEP:UpdateBonePositions(vm)

	if self.ViewModelBoneMods then

		if (!vm:GetBoneCount()) then return end

		// !! WORKAROUND !! //
		// We need to check all model names :/
		local loopthrough = self.ViewModelBoneMods
		if (!hasGarryFixedBoneScalingYet) then
			allbones = {}
			for i=0, vm:GetBoneCount() do
				local bonename = vm:GetBoneName(i)
				if (self.ViewModelBoneMods[bonename]) then 
					allbones[bonename] = self.ViewModelBoneMods[bonename]
				else
					allbones[bonename] = { 
						scale = Vector(1,1,1),
						pos = Vector(0,0,0),
						angle = Angle(0,0,0)
					}
				end
			end

			loopthrough = allbones
		end
		// !! ----------- !! //

		for k, v in pairs( loopthrough ) do
			local bone = vm:LookupBone(k)
			if (!bone) then continue end

			// !! WORKAROUND !! //
			local s = Vector(v.scale.x,v.scale.y,v.scale.z)
			local p = Vector(v.pos.x,v.pos.y,v.pos.z)
			local ms = Vector(1,1,1)
			if (!hasGarryFixedBoneScalingYet) then
				local cur = vm:GetBoneParent(bone)
				while(cur >= 0) do
					local pscale = loopthrough[vm:GetBoneName(cur)].scale
					ms = ms * pscale
					cur = vm:GetBoneParent(cur)
				end
			end

			s = s * ms
			// !! ----------- !! //

			if vm:GetManipulateBoneScale(bone) != s then
				vm:ManipulateBoneScale( bone, s )
			end
			if vm:GetManipulateBoneAngles(bone) != v.angle then
				vm:ManipulateBoneAngles( bone, v.angle )
			end
			if vm:GetManipulateBonePosition(bone) != p then
				vm:ManipulateBonePosition( bone, p )
			end
		end
	else
		self:ResetBonePositions(vm)
	end

end

function SWEP:ResetBonePositions(vm)

	if (!vm:GetBoneCount()) then return end
	for i=0, vm:GetBoneCount() do
		vm:ManipulateBoneScale( i, Vector(1, 1, 1) )
		vm:ManipulateBoneAngles( i, Angle(0, 0, 0) )
		vm:ManipulateBonePosition( i, Vector(0, 0, 0) )
	end

end

/**************************
	Global utility code
**************************/

// Fully copies the table, meaning all tables inside this table are copied too and so on (normal table.Copy copies only their reference).
// Does not copy entities of course, only copies their reference.
// WARNING: do not use on tables that contain themselves somewhere down the line or you'll get an infinite loop
function table.FullCopy( tab )

	if (!tab) then return nil end

	local res = {}
	for k, v in pairs( tab ) do
		if (type(v) == "table") then
			res[k] = table.FullCopy(v) // recursion ho!
		elseif (type(v) == "Vector") then
			res[k] = Vector(v.x, v.y, v.z)
		elseif (type(v) == "Angle") then
			res[k] = Angle(v.p, v.y, v.r)
		else
			res[k] = v
		end
	end

	return res

end

end

 [/lua]

If you know what I did wrong, please tell me.

Please use [noparse][lua][/lua][/noparse] tags when posting code on the forums.